Python PyTorch ValueError:预期的目标大小(2,33),获得了torch.size([2,73])

Python PyTorch ValueError:预期的目标大小(2,33),获得了torch.size([2,73]),python,pytorch,loss-function,valueerror,cross-entropy,Python,Pytorch,Loss Function,Valueerror,Cross Entropy,我对Pytorch很陌生。 我想计算变压器中一批的损耗。在这种情况下,我的“批处理”只有两个副本。 批次输出形状为2,73,33的张量: output tensor([[[ 21.1355, -7.5047, 2.8138, ..., -14.1462, -15.1999, -7.2595],... output.size() >>> torch.Size([2, 73, 33]) 目标公司拥有每个职位的分类解决方案。其形状为2,73: target.size()

我对Pytorch很陌生。 我想计算变压器中一批的损耗。在这种情况下,我的“批处理”只有两个副本。 批次输出形状为2,73,33的张量:

output
tensor([[[ 21.1355,  -7.5047,   2.8138,  ..., -14.1462, -15.1999,  -7.2595],...
output.size()
>>> torch.Size([2, 73, 33])
目标公司拥有每个职位的分类解决方案。其形状为2,73:

target.size()
>>> torch.Size([2, 73])
当我计算损失时,如果我只比较第一个副本,我会得到一个值:

loss = torch.nn.CrossEntropyLoss(ignore_index=1)
loss(output[0], target[0])
tensor(0.1967)
但当我一次完成所有工作时,它会出错:

loss = torch.nn.CrossEntropyLoss(ignore_index=1)
loss(output, target)
ValueError: Expected target size (2, 33), got torch.Size([2, 73])
我是否必须循环复制副本并对其进行平均?
非常感谢您的帮助。

当您有一个73x1目标时,为什么要输出73x33?当您想要去掉33(输出的第三个dim)时,可以尝试
ignore_index=2
ignore_index指的是目标中要忽略的索引(因为输入具有不同的长度,所以使用填充标记(在本例中为数字1)将它们填充到相同的长度)