问题描述
我想使用 pytorch 的 Crossentropyloss 但不知何故我的代码只适用于批量大小 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,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,seq_len)
。这应该让它发生:
output = output.permute(0,2,1)
此外,您的目标也必须更改为 (batch_size,seq_len)
:
target = target.permute(1,0)