我想使用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
之间,我是否可以以等效的方式逐个元素地使用二进制交叉熵损失?
答案 0 :(得分:1)
对于CrossEntropyLoss
,Y的形状必须为(42,32),每个元素必须为[0,129]区间内的Long标量。
您可能想使用BCELoss
或BCEWithLogitsLoss
解决问题。