首页 > 解决方案 > 如何使用 torch.nn.CrossEntropyLoss 作为自编码器的重建损失?

问题描述

我想使用 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: Expected target size (42, 130), got torch.Size([42, 32, 130])

查看文档后,我仍然不确定我应该如何nn.CrossEntropyLoss()以适当的方式调用。似乎我应该将 Y 更改为 shape [42, 32, 1],每个元素都是区间[0, 129](或[1, 130])中的标量,对吗?

有没有办法避免这种情况?由于XY介于0和之间1,我可以以等效的方式逐元素使用二元交叉熵损失吗?

标签: pythonmachine-learningdeep-learningpytorchcross-entropy

解决方案


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

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


推荐阅读