首页 > 解决方案 > 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,batchsize=3,dimensions=64)。

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

标签: machine-learningdeep-learningpytorchcross-entropy

解决方案


如果没有有关您的模型的更多信息,这就是我要做的。你有一个多对多 RNN,它(seq_len, batch_size, nb_classes)的输出和目标是(seq_len, seq_len). 该nn.CrossEntropyLoss模块可以将其他维度(batch_size, nb_classes, d1​, d2​, ..., dK​)作为输入。

您可以通过排列轴来使其工作,使得输出的张量具有 shape (batch_size, nb_classes, seq_len)。这应该使它发生:

output = output.permute(0, 2, 1)

此外,您的目标还必须更改为(batch_size, seq_len)

target = target.permute(1, 0)

推荐阅读