如何使用torch.nn.CrossEntropyLoss作为自动编码器的重建损失?

时间:2019-04-12 12:44:47

标签: python machine-learning deep-learning pytorch cross-entropy

我想使用CrossEntropyLoss计算自动编码器的重构精度:

ae_criterion = nn.CrossEntropyLoss()
ae_loss = ae_criterion(X, Y)

其中X是自动编码器的重构,而Y是目标(因为它是自动编码器,所以Y与原始输入X相同)。 XY的形状均为[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])中的标量,对吗?

有办法避免这种情况吗?由于XY01之间,我是否可以以等效的方式逐个元素地使用二进制交叉熵损失?

1 个答案:

答案 0 :(得分:1)

对于CrossEntropyLoss,Y的形状必须为(42,32),每个元素必须为[0,129]区间内的Long标量。

您可能想使用BCELossBCEWithLogitsLoss解决问题。