交叉熵损失函数输出NAN的问题:
之前使用tensorflow训练模型,开始的一段迭代周期,模型的预测准确率一直在上升,徘徊一段时间后,准确率骤减,直至到随机猜测的水平,开始以为是模型出了问题,就修改了一下代码,记录训练过程中的误差,希望通过误差曲线,分析是否模型的问题。结果绘图出错,将损失数组输出看了一下,发现后期的损失值都是0。在网上查询,发现是损失函数的特性造成的,在交叉熵损失函数中,会计算预测概率的对数,当这个概率接近于0时,或等于0时,会发生溢出。
在网上看到的很多关于MNIST数据的训练模型都没有注意这个问题,因为给的示例不容易出现这个问题,如果当修改模型,加深神经网络的层次,这个问题就会发生。
如果想避免这个问题,就需要在计算对数的时候对这个概率先进行一个处理,将这个概率限制在一定的范围内,TensorFlow提供了一个这样的函数:
tf.clip_by_value(t, clip_value_min, clip_value_max, name=None)</