目录
项目场景:
当我使用AST作为预训练模型,并将输出变成十分类时,出现了下面的问题。
问题描述
模型训练时出现了下面的问题(这里给出报错的部分截图):
当时找了几篇文章都说是在做分类任务时,训练数据中存在超出分类数目的标签。但是我检查过,分类数目和标签是对应的。后来找到了RuntimeError: CUDA error: device-side assert triggered的解决_思念殇千寻的博客-CSDN博客
当时就根据作者的总结:
总结一下:
1. 在Pytorch进行BCELoss的时候,需要输入值都在[0, 1]之间,如果你的网络的最后一层不是sigmoid,你需要把BCELoss换成BCEWithLogitsLoss,这样损失函数会替你做Sigmoid的操作。
2. 神经网络的输入和输出一般都是有限量,如果你确认你的网络是好的,不妨查看一下网络的输入是不是已经变成了nan
3. 神经网络的一些网络层是不需要训练的,此时你需要告诉优化器这件事,不然optim会做出一些蠢事让输出值变成nan
发现我使用的是BCELoss,但是AST最后的全连接层不是sigmoid,所以我将损失函数改成了BCEWithLogitsLoss,最后就不报错了。