Crossentropyloss Pytorch:Targetsize 与 Torchsize 不匹配

Crossentropyloss Pytorch: Targetsize does not match 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).

我需要如何更改形状才能使交叉熵起作用?

在没有关于您的模型的更多信息的情况下,这就是我要做的。您有一个多对多 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)