当我验证输入为非 0 维时,为什么 nn.CrossEntropyLoss 会抛出“TypeError:0 维张量上的迭代”?

ROS*_*ROS 4 pytorch

我正在使用 PyTorch 版本 1.5.0。当我传递大小为 [8,21,400,400] 的输入火炬张量和大小为 [8,400,400] 的目标时,程序会引发 TypeError:对 0 维张量进行迭代。然而,参数的维度分别为 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
Run Code Online (Sandbox Code Playgroud)

Ale*_*rov 8

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