栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

前几天训练模型的时候,遇到了一个问题,就是特征值输入模型之前好好的,但是经过我的网络之后,输出的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的损失函数是否是线性可导的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739425.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号