zoukankan      html  css  js  c++  java
  • 听说你的模型损失是NaN

    听说你的模型损失是NaN

    有时候,模型跑着跑着,损失就莫名变NaN了。不过,经验告诉我们,大部分NaN主要是因为除数是0或者传给log的数值不大于0。下面说说是log出NaN的几种常见解决方法。

    毕竟, 计算机的是无法表示所有实数的,尽管有些函数得出的结果只能无限近似0,但是由于计算机精度问题,最后的结果往往被表示为0。比如sigmoid函数,取值在0到1之间。

    下面介绍TensorFlow的解决log出NaN的常见方法:

    方法1:在保证传给log的数值不会有负数的情况下,可以直接加一个比较小的常数

    tf.log(x + 1e-10)
    

    这种方法不是很推荐,因为有时候需要log的输出作为别的输入。

    方法2:利用clip,或者maximum

    tf.log(tf.maximum(x, 1e-15))
    tf.log(tf.clip_by_value(x, 1e-15, np.inf))
    

    方法3:如果你计算的是log loss,那么最好的推荐是利用TensorFlow的内建log损失函数

    tf.nn.log_softmax(x)
    
  • 相关阅读:
    Java实现二叉排序树
    servlet/filter/listener/interceptor区别与联系
    Java中创建对象的5种方式
    字符串练习
    成员变量、类变量、局部变量的区别
    强制清除gradle 缓存
    XML
    jQuery
    JavaScript
    CSS
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/8087831.html
Copyright © 2011-2022 走看看