loss出现Nan的解决办法(梯度爆炸)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了loss出现Nan的解决办法(梯度爆炸)相关的知识,希望对你有一定的参考价值。

参考技术A 1、加入gradient clipping:

    例如用的是交叉熵cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))的话,最后softmax层输出y_conv的取值范围在[0,1]页就是说允许取0值,有log(0)出现很有可能出现nan,cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y_conv,1e-15,1.0))),在tensorflow中可以限定一下y_conv的取值范围。

    把上面的替换成下面的:

2、修改参数初始化方法:

    对于CNN可用xavier或者msra的初始化方法。

3、数据归一化:

    3.1 白化:减均值、除方差;

    3.2 加入normalization,比如BN、L2 norm等。

4、减小学习率、或者batch size;

以上是关于loss出现Nan的解决办法(梯度爆炸)的主要内容,如果未能解决你的问题,请参考以下文章

输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值。解决办法是啥

出现梯度消失和梯度爆炸的原因及解决方案

一文读懂:梯度消失(爆炸)及其解决方法

[深度学习][pytorch][原创]crnn在高版本pytorch上训练loss为nan解决办法

有没有办法在张量流中剪辑中间爆炸梯度

什么是梯度爆炸?怎么解决?