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

PyTorch基于BERT二分类时nn.CrossEntropyLoss Target 2越界报错排查

问题原因
  • 你的二分类任务模型最后一层输出维度为2,对应类别索引必须为0和1,但从dataloader的打印结果可以看到你的标签值是1和2,当损失函数计算遇到值为2的标签时,会尝试索引模型输出的第3个位置(索引从0开始计数),超出了输出维度范围,所以抛出Target 2 is out of bounds错误。
  • 额外注意:你在模型最后一层linear2后面加了ReLU激活是不合理的,nn.CrossEntropyLoss要求输入是原始logits,不需要额外加激活层,ReLU会截断负值的logits,会影响模型的收敛效果。
修复方案
  1. 调整数据集标签映射,在自定义Dataset的__getitem__方法中修改标签值:
# 原代码
sentiment = int(self.df['sentiment'].iloc[index])
# 改为
sentiment = int(self.df['sentiment'].iloc[index]) - 1

这样原来的标签1会转为0,标签2转为1,刚好适配二分类的标签范围。
2. 移除模型最后一层的ReLU激活:

# 原代码
x = self.relu2(self.linear2(x))
return x
# 改为
x = self.linear2(x)
return x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:06:03