复现一个四五年前的网络的时候,出现loss为nan,显示在训练但所有的loss全部为nan,且刚开始loss就为nan,我尝试了各种各样的方法,包括找人调代码(事实证明求人不如求己)但都不行!!!!
解决历程:(网络上搜别人如何解决)
1.查看数据集有无缺失值,数据集是否可以正常读取(我寻思用的时候公开数据集不能够有问题吧,但我还是用一个简单网络查了一下,果然没问题,建议使用公开数据集直接略过这一步),很显然这一步解决不了问题。
2.刚上来loss就为nan,怀疑参数问题,学习率改到很小很小,也没用。
3.怀疑梯度爆炸,尝试了各种方法
初始化方法改为Xavier也没用
尝试采用自动梯度裁剪,没用
检查了激活函数没问题
检查了归一化,也没问题
3.检查自己是不是因为内存原因float精度减半,发现并没有
4.怀疑是不是系统问题,在Linux系统部署了一会,放弃
后面我嫌这个网络加载太慢了,但别的网络加载很快,我就用别的网络的环境加载了这个网络,一下子就加载出来了!!!!!!并且有损失值了!!!!
所以复现网络时,特别是很久之前的网络,遇上解决不了的问题,尝试使用常用的环境和库的版本!!