GPU上运行基于bert的分类任务训练loss为nan

本文介绍了一种常见问题的解决方案:当模型训练过程中出现loss值为NaN时,通过检查并修正数据集标签的问题来恢复正常训练过程。具体地,通过对标签进行映射,使其与模型输出的标签范围相匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题如下:

 

运行环境:GPU 1080Ti

代码流程:因为是在之前的一份情感数据集上测试通过的,所以流程整体上应该没有大的问题。

但就是loss一直为nan,也没有报错。

然后经对比测试,同样的数据,同样的代码,在CPU上运行,会报如下错误:

意思就是说:数据标签有问题。

回过头,考虑两份数据标签,发现的确有区别:

        之前的情感分类数据为2分类,标签分别为:0和1;

        现在的是多个类别的分类,标签为:1,2,3,4,5;注意,后面的数据标签是[1,2,3,4,5],没有从0开始。

如果这种标签直接喂给模型训练的话,按照目前我们的模型结构,最后一层Dense,预测的标签实际上是从0开始的,即[0,1,2,3,4],这样就导致,预测的标签和实际标签永远不一致,在计算loss时会出问题。

所以针对此问题,进行修改,给标签做了个映射,把[1,2,3,4,5],分别映射到[0,1,2,3,4],重新训练就可以正常运行了。

需要注意的是,predict的时候,也要映射回原始的标签。

有此问题也说明,GPU和CPU运行代码上还是有些区别的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值