交叉熵损失Pytorch:Targetsize与Torchsize不匹配



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

相关内容

  • 没有找到相关文章

最新更新