我想使用CrossEntropyLoss计算我的自动编码器的重建精度:
ae_criterion = nn.CrossEntropyLoss()
ae_loss = ae_criterion(X, Y)
其中X
是自动编码器的重建,而Y
是目标(因为它是自动编码器,Y
与原始输入X
相同)。 X
和Y
都有形状[42, 32, 130] = [batch_size, timesteps, number_of_classes]
。当我运行上面的代码时,我收到以下错误:
ValueError:预期目标大小(42,130),得到了torch.Size([42,32,130])
在查看文档后,我仍然不确定如何以适当的方式调用nn.CrossEntropyLoss()
。似乎我应该改变Y形状[42, 32, 1]
,每个元素是区间[0, 129]
(或[1, 130]
)中的标量,我是对的吗?
有办法避免这种情况吗?由于X
和Y
介于0
和1
之间,我能否以相同的方式使用二元交叉熵损失?
对于CrossEntropyLoss
,Y的形状必须为(42,32),每个元素必须是区间[0,129]中的长标量。
你可能想用BCELoss
或BCEWithLogitsLoss
来解决你的问题。