训练网络的时候Loss突然变为nan

阅读: 评论:0

训练网络的时候Loss突然变为nan

训练网络的时候Loss突然变为nan

训练网络的时候Loss突然变为nan

最近在跑一个实验,训练网络的时候Loss突然变为了nan,如下图所示:有趣的事是这个nan出现的时间是随机的,有时候是第一个epoch,有时候是后面的epoch。

上网查各种资料,有的说Loss的问题,比如可能出现了log0,分母为0的问题,但这种可能性可以排除,因为我用的loss是mse loss:
关于mse loss就不在这里说明了,大家可以上网查询细节信息。所以,可以排除是loss的可能。

还有的资料说是学习率的问题,我改了很多次也没解决,所以也可以排除了。。。

为了“调查”清楚出现nan的原因,接下来就开始进行debug调试:
经过调试后,发现了问题的所在:kernal突然变成了nan!!!

这里要说明一下,kernal是我训练的标签,pre_kernal是网络的输出,训练的目的就是让pre_kernal的值尽量接近kernal标签的值。

也就是说标签值都变成了nan,那么mse计算出的loss就肯定是个nan了!

为了调查清楚为什么标签值会变为nan,继续debug!
最终发现了问题所在,如上图所示。

额,上图是一张正常的图,不正常的图我忘截了,毕竟我也不想再跑一遍,万一这一遍不出现nan岂不是要绝望。。。

为了说明问题的本质,我就抛开我网络中具体的实现细节。A是一个训练样本数据,自然不会出现nan,B也是一个训练样本数据,也不会出现nan,问题就在X中,X就是标签值,这个X是怎么获得的呢:

X=torch.linalg.lstsq(A, B, rcond=None, *, driver=None)

这个函数的作用就是得到一个线性方程的最小二乘解,具体实现细节大家可以百度。

这个函数对于pytorch的版本要求很高,刚开始也因为这个函数苦恼了很久,后来才知道只有pytorch1.8以上才有这个函数。。。

言归正传,这下找到了问题所在,我认为lstsq这个函数对于输入数据特别敏感,毕竟我的训练数据是图像,可能是因为图像变为数字后,再经过这个函数的作用就产生了nan,这个nan的产生是随机的,这与训练数据有关(B是一个随机的高斯分布),也可能与该函数内部中的具体实现过程有关,因此这才产生了nan出现在了不同的epoch中的情况。

好了,找到原因了,那么该怎么修改才能使数据中不出现nan呢?感谢pytorch提供的函数:
这样就可以将数据中出现nan的地方替换为另一个数(为了保险,我还将inf的情况也排除。这样做是因为在训练的时候可能出现了脏数据问题,脏数据产生了nan,因此将这个脏数据替换掉即可)

为什么写成Z=(Y),W=(Z)的形式而不是直接写出Z=(Z)的形式:如果你写成后者,会报错,因为反向传播计算梯度的时候可能会产生混乱,所以要写成前者。

本以为经过这样处理后没有问题了,结果依然在训练的时候出现nan…(真是太它母亲的nan了啊),于是我放弃了这个解决思路,既然在某一个epoch开始出现nan,那就用断点续训的方式把每个epoch的训练参数都记下来,然后当某个epoch出现nan时,再从前一个epoch开始续训。。。
最终成功训练了50个epoch,终于完成了整个训练过程。

这里需要注意一点,就是如果你用断点续训的话,一定要间断性测试网络的性能效果,我在训练的时候就发生过这种离谱的事情:训练到第10个epoch,然后从第11个epoch开始网络的性能开始一落千丈(网络性能测试的方法具体问题具体分析吧,总之一定要间断性测!)后面的网络性能越来越不好,因为后一个epoch的参数都和前一个epoch有关。测试完网络的性能不好后我又从第10个epoch开始训,然后再测的时候网络性能恢复了。。。

以上就是我在排除nan的过程中出现的种种问题与解决方法和解决思路,希望能够帮助到需要帮助的小伙伴,某些具体的问题我就不详细叙述了,大家上网应该都能找到,这里只提供我遇到的一些问题与解决思路。

之前一直都在typora中自己记录种种问题,但突然发现身为一名技术人员,表达、交流、学习与共享是非常重要的,那么就从我的第一篇blog开始吧。

本文发布于:2024-01-28 16:46:10,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064315788836.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:react学习总结
下一篇:nodejs模块学习
标签:网络   Loss   nan
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23