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

交叉熵损失函数输出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。


  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值