之前在TensorFlow中实现不同的神经网络,作为新手,发现经常会出现计算的loss中,出现Nan值的情况,总的来说,
TensorFlow中出现Nan值的情况有两种,一种是在loss中计算后得到了Nan值,另一种是在更新网络权重等等数据的
时候出现了Nan值,本文接下来,首先解决计算loss中得到Nan值的问题,随后介绍更新网络时,出现Nan值的情况。
Loss计算中出现Nan值

在搜索以后,找到StackOverflow上找到大致的一个解决办法(原文地址:https://stackoverflow.com/questions/33712178/tensorflow-nan-bug),大致的解决办法就是,在出现Nan值的loss中一般是使用的TensorFlow的log函数,然后计算得到的Nan,一般是输入的值中出现了负数值或者0值,在TensorFlow的官网上的教程中,使用其调试器调试Nan值的出现,也是查到了计算log的传参为0;而解决的办法也很简单,假设传参给log的参数为y,那么在调用log前,进行一次数值剪切,修改调用如下:
loss = tf.log(tf.clip_by_value(y,1e-8,1.0))
这样,y的最小值为0的情况就被替换成了一个极小值,1e-8,这样就不会出现Nan值了,StackOverflow上也给出了相同的解决方案。于是,我就采用了上述的解决方案对于log的参数进行数值限制,但是我更加复杂化了这个限制。
tf.clip_by_value这个函数,是将第一个参数,限制在第二、三个参数指定的范围之内,使用这个函数的原意是要避免0值,并没有限制最大值,因而我将限制的调用修改如下:
loss = tf.log(tf.clip_by_value(y,1e-8,tf.reduce_max(y)))
这样就确保了对于y值的剪切,不会影响到其数值的上限。但是在实际的神经网络中使用的时候,我发现这样修改后,虽然loss的数值一直在变化,可是优化后的结果几乎是保持不变的,这就存在问题了。
经过检查,其实并不能这么简单的为了持续训练,而修改计算损失函数时的输入值。这样修改后,loss的数值很可能(存在0的话确定就是)假的数值,会对优化器优化的过程造成一定的影响,导致优化器并不能正常的工作。
要解决这个假的loss的方法很简单,就是人为的改造神经网络,来控制输出的结果,不会存在0。这就需要设计好最后一层输出层的激活函数,每个激活函数都是存在值域的,详情请见博客http://www.jianshu.com/p/ffd3e63f39ef,比如要给一个在(0,1)之间的输出(不包含0),那么显然sigmoid是最好的选择。不过需要注意的是,在TensorFlow中,tf.nn.sigmoid函数,在输出的参数非常大,或者非常小的情况下,会给出边界值1或者0的输出,这就意味着,改造神经网络的过程,并不只是最后一层输出层的激活函数,你必须确保自己大致知道每一层的输出的一个范围,这样才能彻底的解决Nan值的出现。
举例说明就是TensorFlow的官网给的教程,其输出层使用的是softmax激活函数,其数值在[0,1],这在设计的时候,基本就确定了会出现Nan值的情况,只是发生的时间罢了。
更新网络时出现Nan值

更新网络中出现Nan值很难发现,但是一般调试程序的时候,会用summary去观测权重等网络中的值的更新,因而,此时出现Nan值的话,会报错类似如下:
InvalidArgumentError (see above for traceback): Nan in summary histogram for: weight_1
这样的情况,一般是由于优化器的学习率设置不当导致的,而且一般是学习率设置过高导致的,因而此时可以尝试使用更小的学习率进行训练来解决这样的问题。

Tensorflow中训练得到Nan错误的分析相关推荐

  1. 如何在TensorFlow中训练Boosted Trees模型

    在使用结构化数据时,诸如梯度提升决策树和随机森林之类的树集合方法是最流行和最有效的机器学习工具之一. 树集合方法训练速度快,无需大量调整即可正常工作,并且不需要大型数据集进行训练. 在TensorFl ...

  2. Lua(Codea) 中 table.insert 越界错误原因分析

    2019独角兽企业重金招聘Python工程师标准>>> Lua(Codea) 中 table.insert(touches, touch.id, touch) 越界错误原因分析 背景 ...

  3. 深度学习网络训练中出现nan的原因分析

    报错: nan:Not a Number 该错误导致的后果:造成训练准确率的断崖式下跌 错误原因分析: 1)在loss函数中出现nan 出现原因:一般是因为tf中的log函数输入了'负数'或'0'值( ...

  4. 模型训练过程中产生NAN的原因分析

    模型训练过程中产生NAN的原因分析 在模型的训练过程中发现,有时在经过多轮训练后loss会突然变为nan.loss变为nan也就使权重更新后的网络里的参数变为了nan,这样就使整个训练无法再进行下去了 ...

  5. 解决tensorflow在训练的时候权重是nan问题

    搭建普通的卷积CNN网络. nan表示的是无穷或者是非数值,比如说你在tensorflow中使用一个数除以0,那么得到的结果就是nan. 在一个matrix中,如果其中的值都为nan很有可能是因为采用 ...

  6. TensorFlow中的Nan值的陷阱

    北京站 | NVIDIA DLI深度学习培训 2018年1月26日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文                           正文共1583 ...

  7. pytorch训练过程中loss出现NaN的原因及可采取的方法

    在pytorch训练过程中出现loss=nan的情况 1.学习率太高. 2.loss函数 3.对于回归问题,可能出现了除0 的计算,加一个很小的余项可能可以解决 4.数据本身,是否存在Nan,可以用n ...

  8. Android开发中StackOverflowError错误实例分析

    http://blog.csdn.net/mozhizun/article/details/7051300 http://blog.csdn.net/gaomatrix/article/details ...

  9. 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 直接调用 C++ 接口实现

    现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过直 ...

  10. Python中的XML解析错误[Et.parse(xml) ‘gbk‘ codec can‘t decode byte]分析与解决

    Python中的XML解析错误[Et.parse(xml) 'gbk' codec can't decode byte]分析与解决 在Python开发中,我们经常会使用XML格式的数据来进行数据传输或 ...

最新文章

  1. java指令集_javap 指令集
  2. 【PC工具】常用USB转串口芯片CH340G,驱动安装有可能遇到的问题及解决办法
  3. ie浏览器怎么打开html,Win10系统IE浏览器不能打开HTML怎么办
  4. spring 控制hibernate的session何时关闭.
  5. http referer 验证防御方法_渗透测试 跨站攻击防御与安全检测手法剖析
  6. NOIP模拟测试10「大佬·辣鸡·模板」
  7. A4Desk 网站破解
  8. android service 本地 远程 总结
  9. 鼠标放到图片上替换图片,改变样式。
  10. hibernate在不联网或者网络异常时不能解析配置文件
  11. annotation:@Override出现The method of type must override asuperclass解决方案
  12. python监控网站更新_Python 通过网站search功能监控网站内容更新
  13. 臭名昭著的Java”
  14. 基于Pytorch实现的快速人脸识别模型
  15. 儿童的31个“敏感期”特点及建议(转载)
  16. [Unity存档系统]简单介绍Unity常见存档系统二JSON以及使用方法
  17. c#dataview遍历_[C#] DataView用法
  18. 吗咿呀嘿-用js来搞个简单的人脸识别
  19. 免费专利检索和下载网站(亲测超实用)
  20. java顺序查找法 监视器_java算法:顺序查找(有监视哨和无监视哨)

热门文章

  1. Mybatis sqlsession解析
  2. Codeforces 464E. The Classic Problem
  3. python学习笔记(十二)之函数
  4. @Autowired与@Resource
  5. 前端干货:教你轻松去除inline-block元素空隙
  6. SQL像数组一样处理字符串、分割字符串(标量值函数[用户自定义函数])
  7. Python 函数参数传递的困惑
  8. 查找算法之变种二分查找(C++版本)
  9. MySQL视图一次踩坑经历
  10. 华为交换机做qos案例_华为技术:Qos典型配置,配置交换机接口限速示例