RuntimeError: "nll_loss_forward_reduce_cuda_kernel_2d_index" not implemented for 'Int'


今天有空,把之前遇到的问题总结一下。
问题Traceback详情
Traceback (most recent call last):
  File "E:/MyWorkspace/EEG/Pytorch/Train.py", line 79, in <module>
    opti='Adam')
  File "E:\MyWorkspace\EEG\Pytorch\Utils.py", line 133, in TrainTest_Model
    validation_loss, validation_acc = Test_Model(net, testloader, criterion,True)
  File "E:\MyWorkspace\EEG\EEGLearn-Pytorch\Utils.py", line 82, in Test_Model
    loss = criterion(outputs, labels.cuda()) # GPU
  File "D:\coson\anaconda3\envs\pytorch\lib\site-packages\torch\nn\modules\module.py", line 1130, in _call_impl
    return forward_call(*input, **kwargs)
  File "D:\coson\anaconda3\envs\pytorch\lib\site-packages\torch\nn\modules\loss.py", line 1166, in forward
    label_smoothing=self.label_smoothing)
  File "D:\coson\anaconda3\envs\pytorch\lib\site-packages\torch\nn\functional.py", line 3014, in cross_entropy
    return torch._C._nn.cross_entropy_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index, label_smoothing)
RuntimeError: "nll_loss_forward_reduce_cuda_kernel_2d_index" not implemented for 'Int'
Process finished with exit code 1

关键错误在criterion(outputs, labels.cuda()) ,在本工程中criterion运行时给的值CrossEntropyLoss类实例,即: criterion = nn.CrossEntropyLoss(),因此该错误是在loss计算的时候发生的,原因就是类型不匹配,那个参数类的类型不匹配呢?(其实就是labels类型不匹配,手动给的参数中,我这labels是int32即Int,所以很好判定,但如果不知道,怎么办,接着往下看)
看到torch\nn\modules\loss.py的1166行,即label_smoothing=self.label_smoothing,该1166行是函数调用部分代码,完整代码如下:

    def forward(self, input: Tensor, target: Tensor) -> Tensor:
        return F.cross_entropy(input, target, weight=self.weight,
                               ignore_index=self.ignore_index, reduction=self.reduction,
                               label_smoothing=self.label_smoothing)

打开cross_entropy定义头,看到如下:

def cross_entropy(
    input: Tensor,
    target: Tensor,
    weight: Optional[Tensor] = None,
    size_average: Optional[bool] = None,
    ignore_index: int = -100,
    reduce: Optional[bool] = None,
    reduction: str = "mean",
    label_smoothing: float = 0.0,
) -> Tensor:

我们传入的参数对应cross_entropyinputtarget,定义中没有指出input和target数值类型,到底是哪个参数不匹配,接着在cross_entropy函数往下看,发现其调用了C函数,芭比Q了,

torch._C._nn.cross_entropy_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index, label_smoothing)

看不到这个C函数的底层实现,如何办,看看官方给函数说明和例子吧,峰回路转,发现在cross_entropy函数说明中有以下例子:

  # Example of target with class indices
  input = torch.randn(3, 5, requires_grad=True)
  target = torch.randint(5, (3,), dtype=torch.int64)
  loss = F.cross_entropy(input, target)
  loss.backward()
官方给的target用的int64,即long类型
所以可以断定`criterion(outputs, labels.cuda())`中的labels参数类型造成。
由上,我们可以对labels参数类型做转为:
```python
labels.long().cuda()
criterion(outputs, labels.long().cuda())

修改后,代码正常运行。

我们为大型强子对撞机运行II中的成对产生的壁虎和胶合糖的横截面提供了最新的预测。 首先,我们使用NNPDF3.0NLO全局分析更新基于NLO + NLL子截面的计算。 这项研究包括对来自高阶,PDF和强耦合的理论不确定性的全面描述。 然后,我们探索使用NLO + NLL阈值恢复来计算最近的NNPDF3.0 PDF的含义。 我们发现,由阈值改进的PDF导致的结果偏移在基于NLO PDF的计算的总理论不确定性范围内。 但是,我们还观察到,NLO + NLL横截面的中心值以定性和定量方式进行了修改,说明了使用阈值改进的PDF和恢复的部分截面的相关性和影响。 基于NNPDF3.0NLO的更新的NLO + NLL横截面以NLL-fast格式公开提供,并且应该是解释运行II中对超对称粒子的解释的重要成分。
main.py:主文件,设置超参数,执行训练,保存模型检查点等 BNN.py:异方差神经网络的类定义 gaussian_nll_loss_class.py:高斯负对数似然损失 anchor_loss.py:锚点丢失 RMSE.py:均方根误差损失 训练单个神经网络 python main.py(默认值:种子= 0,开始时期= 0) python main.py -s 42(使用种子= 42播种训练过程) python main.py -s 42 -c 1000(从预先保存为epoch = 1000的模型开始训练过程) 可以通过唯一地播种该合奏的每个成员并运行'python main.py -s(seed)'来训练一个合奏。 python 3.6.8 pytorch 1.
运行pytorch在计算cross_entropy的loss遇到报错 RuntimeError: "nll_loss_forward_reduce_cuda_kernel_2d_index" not implemented for 'Int'` 原因是pytorch自带的损失计算函数不支持原本的标签1,2,3,4…,n,需要转换成网络需要的one_hot编码才行 具体代码如下 one_hot = torch.zeros(np.array(batch_size, num_class, device=tor
Traceback (most recent call last): File "/home/hgx/pycharm-2020.1.3/plugins/python/helpers/pydev/_pydevd_bundle/pydevd_exec2.py", line 3, in Exec exec(exp, global_vars, lo
Traceback (most recent call last): File "D:\nlp\zhinengyunwei\wh_lstm_pytorch.py", line 213, in <module> loss = loss_func(torch.squeeze(output), target) File "D:\ProgramData\Anaconda3\lib\site-packages\torch\nn\modules\module.py", line 1102,
在模型调试阶段,如果定位不出具体的错误,建议将模型放在CPU上进行调试,这样荣誉i做9分类,在CPU上调试时,报的错误是 从报错的信息可以看出,是计算损失函数时出错了,但是在GPU上进行调试时,根本不容易定位到具体错误,如下: 从这个报错来看,非专业人士几乎看不懂从报错来看,是标签超出了界限,作9分类,我的标签是从1开始的,所以会报错,将标签改为从0开始就解决问题了...
解决RuntimeError: _thnn_mse_loss_forward is not implemented for type torch.cuda.LongTensor和scatter_方法
PyTorch中遇到了如标题的问题,网上大多数给的是类型不匹配问题,在stackoverflow找到了问题的答案,这里出现的问题是因为loss需要one-hot类型的数据,而我们使用的是类别标签。 什么是one-hot? 一个例子解释什么是one-hot,对于5分类问题,我们使用[0,0,1,0,0]来表示这个实例是属于第三个类别的,等价于类别标签[2](从0对类别编码)。关于one-hot的好...
报错显示: RuntimeError: cuda runtime error (710) : device-side assert triggered at C:/cb/pytorch_1000000000000/work/aten/src\THC/generic/THCTensorMath.cu:29 用gpu运行不能显示出真正的错误原因,把模型和数据放在cpu上运行显示: return torch._C._nn.cross_entropy_loss(input, target, weight, _Re
RuntimeError: "nll_loss_forward_reduce_cuda_kernel_2d_index" not implemented for 'Int'
这个错误通常是由于数据类型不匹配导致的。在 PyTorch 中,`nll_loss` 函数的输入参数通常是浮点数类型的张量,而不是整数类型的张量。 你可以尝试将输入张量转换为浮点数类型,例如使用 `.float()` 方法将整数类型的张量转换为浮点数类型的张量: ```python import torch # 创建一个整数类型的张量 x = torch.tensor([1, 2, 3], dtype=torch.int) # 将整数类型的张量转换为浮点数类型的张量 x = x.float() # 使用 nll_loss 函数对张量进行计算 loss = torch.nn.functional.nll_loss(x, ...) 如果你仍然遇到问题,请提供更多的上下文和代码,以便更好地帮助你解决问题。
Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigExcept RuntimeError: “nll_loss_forward_reduce_cuda_kernel_2d_index“ not implemented for ‘Int‘ 静春525: 请问应该降低还是更新呢 UnsupportedFileSystemSchemeException: Could not find a file system implementation for scheme ‘s3‘ YY_pdd: 我使用oss,增加一个fs.allowed-fallback-filesystems: oss 这个就可以了 Nelder Mead SIMPLEX Algorithm C++攻程狮: 请问博主,对于多个极小值的最优化问题,此种方法是不是无法求解了,有其他的最优化方法可以解决多个极小值的最优化问题吗 pyflink提交执行报错ImportError: No module named pyflink weixin_39135658: pyflink提交的完整命令有吗