Crossentropyloss Pytorch:Targetsize 与 Torchsize 不匹配

问题描述

我想使用 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)