You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch CrossEntropyLoss报错:RuntimeError:多值张量布尔值歧义

问题原因及修正方案

错误的核心在于CrossEntropyLoss的使用方式:你直接把预测结果和目标作为参数传入了损失类的构造函数,而PyTorch中损失函数的正确用法是先实例化损失对象,再调用该对象传入参数计算损失。

修正后的代码如下:

# 压缩维度,去掉多余的1
predictions_squeezed = cls_scores.squeeze(1)
# 从独热编码转成类别索引
targets = torch.argmax(targets.squeeze(1), dim=1)
# 先实例化损失函数(可按需指定weight等参数,此处用默认配置)
criterion = torch.nn.CrossEntropyLoss()
# 调用实例计算损失
losses = criterion(predictions_squeezed, targets)

补充说明:

  • CrossEntropyLoss类的__init__方法用于配置损失的规则(比如类别权重、是否忽略特定类别等),并非直接计算损失;实际计算逻辑是通过类的__call__方法实现的,也就是实例化后像调用函数一样传入参数。
  • 你对预测结果的维度压缩、从独热编码转换为类别索引的逻辑是正确的,这部分无需调整。

内容的提问来源于stack exchange,提问作者Carlo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:39:51