欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

验证时,所有的特征值经过模型后全为nan;特征值进入Lin全连接后,全部变为nan

时间:2023-05-27

前几天训练模型的时候,遇到了一个问题,就是特征值输入模型之前好好的,但是经过我的网络之后,输出的embedding全变成了nan。
最让人无语的是,这是发生在验证阶段,而不是训练阶段!如果是验证阶段,就可以考虑一下是不是梯度爆炸的问题。但是发生在验证阶段,就很离谱了!
而且,使用小部分测试数据的时候,模型居然一点问题都没有,当使用全部数据的时候,就不行了!当然,我尝试找数据集的问题,对数据集进行随机抽样,输进去其他不管是有规律还是没规律的测试数据集,都不好使,只要是准备真刀真枪的训练模型看效果了,哎,不好使!要测试模型能不能跑通的话,哎,好使!
这个时候,就应该找找问题了,首先我是看了val部分的权重和梯度值,也就是用下面的代码

for name, parms in model.named_parameters():print(name)print(parms.requires_grad)print(parms.grad)

看完之后,我发现,居然grad和weight有的全是nan,有的全是0,所以,原因很清晰了,输进去的特征值,和这些是nan或者0的weight矩阵相乘,那肯定是得不到正常的embedding的。
解决办法:
检查损失函数,val和train的损失函数是否一致(关键!!!)。
train和val的损失函数是否是线性可导的。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。