pytorch - 为什么 nn.CrossEntropyLoss 在我验证输入为非 0 维时抛出 "TypeError: iteration over a 0-d tensor"?

标签 pytorch

我使用的是 PyTorch 1.5.0 版。 当我传递一个大小为 [8,21,400,400] 且目标大小为 [8,400,400] 的输入 torch 张量时,程序会引发 TypeError:迭代 0-d 张量。但是,参数的维度分别为 4 和 3。

什么可能导致此错误?

回溯指向 torch\tensor.py 的 iter 函数。

Traceback (most recent call last):
  File "train.py", line 108, in <module>
    loss, accuracy = lossLayer(pred2, targetBatch)
  File "C:\Users\PC\anaconda3\lib\site-packages\torch\tensor.py", line 462, in __iter__
    raise TypeError('iteration over a 0-d tensor')
TypeError: iteration over a 0-d tensor

最佳答案

你得到这个错误是因为 nn.CrossEntropyLoss 只返回一个 torch.Tensor,而不是一对(它不返回精度)。这个张量是 0 维的,即一个数字(除非您不将 reduction 参数重写为 'none' 以获得每个元素的损失)。因此,当您尝试将其值分配给两个变量 loss, accuracy 时,python 会尝试遍历此张量变量,因此会出现错误消息。只需使用 loss = lossLayer(pred2, targetBatch)

关于pytorch - 为什么 nn.CrossEntropyLoss 在我验证输入为非 0 维时抛出 "TypeError: iteration over a 0-d tensor"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62109287/

相关文章:

python - 将透明图像导入 GAN

python - 如果我安装了两个不同的版本,如何指定要导入的 pytorch?

python - 如何在 PyTorch 中对子集使用不同的数据增强

recurrent-neural-network - 没有 MAX_LENGTH 的 AttentionDecoderRNN

python - Pytorch Argrelmax 函数(或 C++)

backpropagation - pytorch 中的神经网络预测两个二进制变量

python-3.x - 有人将如何在 python 3.9 上使用 pip 安装 pytorch?

python - 如何使用 PyTorch 修剪/移除张量的一部分以匹配另一个张量的形状?

python - 在 Azure ML 中保存 torch 模型

python - 为什么 pytorch 中的正则化和 scratch 代码不匹配,pytorch 中用于正则化的公式是什么?