python - 如何使用 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]
)中的标量,对吗?
有没有办法避免这种情况?由于X
和Y
介于0
和之间1
,我可以以等效的方式逐元素使用二元交叉熵损失吗?
解决方案
对于CrossEntropyLoss
,Y 的形状必须是 (42, 32),每个元素必须是区间 [0, 129] 中的 Long 标量。
您可能想使用BCELoss
或BCEWithLogitsLoss
解决您的问题。
推荐阅读
- python - 有什么方法可以将excel文件中列的值与使用Python的文本文件的内容进行比较?
- python - 使用 python pyautogui 计算点击次数
- git - 如何解决 git 错误:重命名远程分支时“更新被拒绝,因为当前分支的尖端落后”
- php - 在同一查询中访问不同服务器上的两个不同数据库
- c# - 使用 Helixtoolkit c# 显示 Point3DCollection
- django - 如何使“在管理面板中添加选择”见说明
- javascript - 如何执行输出二进制而不是 zip 文件的 zip 压缩?
- python - Python 生成器在后台计算和存储
- reactjs - React - execute javascript after bootstrap modal is completely rendered and visible
- php - 查询报告的正确格式是什么?