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

使用torch.nn.CrossEntropyLoss传入weight参数触发TypeError错误

问题原因及解决方法

核心错误原因

你把weight参数传错地方了:

  • CrossEntropyLoss的weight是初始化损失函数实例时的参数,用来预设类别权重;
  • 而你直接把它放到了损失计算的调用(forward方法)里,forward方法只接受模型输出(input)和标签(target),不识别weight这个关键字参数,所以触发了类型错误。

正确代码写法

先初始化带权重的损失函数实例,再用这个实例计算损失:

# 1. 初始化损失函数时传入weight参数
criterion = nn.CrossEntropyLoss(weight=weights)
# 2. 用实例计算损失,只传模型输出和标签
loss = criterion(outputs, labels)

额外注意点

weights的维度要对应类别数量,不是和outputs/labels的长度一致:

  • 假设你的任务有N个类别,weights应该是形状为(N,)的张量;
  • 比如outputs是(batch_size, N),labels是(batch_size,),那weights的长度必须是N,每个元素对应一个类别的权重。

内容的提问来源于stack exchange,提问作者Donald Mac Duck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:25:15