我想使用pytorch的Crossentropyloss,但不知何故,我的代码只适用于batchsize 2,所以我认为目标和输出的形状有问题。我得到以下错误:
Value Error: Expected target size (50, 2), got torch.Size([50, 3])
我的目标大小是(N=50,batchsize=3)
,我的模型的输出是(N=50, batchsize=3, number of classes =2)
。在输出层之前,我的形状是(N=50,batchsize=3,dimensions=64(。
我需要如何更改形状才能使Crossentropyloss工作?
如果没有关于您的模型的更多信息,我会这样做。您有一个多对多RNN,它输出(seq_len, batch_size, nb_classes)
,目标是(seq_len, seq_len)
。nn.CrossEntropyLoss
模块可以采用附加维度(batch_size, nb_classes, d1, d2, ..., dK)
作为输入。
你可以通过排列轴来使它工作,这样输出的张量的形状是(batch_size, nb_classes, seq_len)
。这应该会实现:
output = output.permute(0, 2, 1)
此外,您的目标也必须更改为(batch_size, seq_len)
:
target = target.permute(1, 0)