我使用的是 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/