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