记记关于tensorflow训练模型时出现损失函数为NAN问题

来源:互联网 发布:淘宝直播达人怎么申请 编辑:程序博客网 时间:2024/06/08 07:40

交叉熵损失函数输出NAN的问题:

之前使用tensorflow训练模型,开始的一段迭代周期,模型的预测准确率一直在上升,徘徊一段时间后,准确率骤减,直至到随机猜测的水平,开始以为是模型出了问题,就修改了一下代码,记录训练过程中的误差,希望通过误差曲线,分析是否模型的问题。结果绘图出错,将损失数组输出看了一下,发现后期的损失值都是0。在网上查询,发现是损失函数的特性造成的,在交叉熵损失函数中,会计算预测概率的对数,当这个概率接近于0时,或等于0时,会发生溢出。

在网上看到的很多关于MNIST数据的训练模型都没有注意这个问题,因为给的示例不容易出现这个问题,如果当修改模型,加深神经网络的层次,这个问题就会发生。


如果想避免这个问题,就需要在计算对数的时候对这个概率先进行一个处理,将这个概率限制在一定的范围内,TensorFlow提供了一个这样的函数:

tf.clip_by_value(t, clip_value_min, clip_value_max, name=None)

这是一个截断函数,限定取值的上下界。


示例如下:

 tf.clip_by_value(y_predict, 1e-10, 1.0)

当y_predict大于1.0时返回1.0;当y_predict小于1e-10时返回1e-10。


原创粉丝点击