问题如下:

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

运行环境:GPU 1080Ti

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

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

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

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

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

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

        之前的情感分类数据为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运行代码上还是有些区别的。

 

12-15 06:41