我想使用 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 更改为形状 [42, 32, 1]
,每个元素都是区间 [0, 129]
中的标量(或 [1, 130]
),我说得对吗?
有办法避免这种情况吗?自 X
和Y
介于 0
之间和1
,我可以以等效的方式按元素使用二元交叉熵损失吗?
最佳答案
对于CrossEntropyLoss
,Y 的形状必须为 (42, 32),每个元素必须是区间 [0, 129] 内的 Long 标量。
您可能需要使用 BCELoss
或 BCEWithLogitsLoss
来解决您的问题。
关于python - 如何使用torch.nn.CrossEntropyLoss作为自动编码器的重建损失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55651920/