当前位置:  开发笔记 > 编程语言 > 正文

在向后传递中调试nans

如何解决《在向后传递中调试nans》经验,为你挑选了1个好方法。

我正在尝试调试一个有点复杂和非规范的NN架构.计算前向传递很好,并且给我预期的结果,但是当我尝试使用Adam或任何标准优化器进行优化时,即使在一次学习率非常小的迭代之后,我也无处不在.我正试图将它们本地化,并且想知道是否有办法捕获第一次出现的纳米并检测它出现在哪个操作中?我试过tf.add_check_numerics_ops()但它似乎没有做任何事情,或者我可能错误地使用它.



1> mrry..:

调试NaN可能很棘手,特别是如果你有一个大型网络.tf.add_check_numerics_ops()将ops添加到图中,断言图中的每个浮点张量都不包含任何NaN值,但默认情况下不运行这些检查.相反,它返回一个可以定期运行的操作,或者每个步骤,如下所示:

train_op = ...
check_op = tf.add_check_numerics_ops()

sess = tf.Session()
sess.run([train_op, check_op])  # Runs training and checks for NaNs


如果你同时运行`train_op`和`check_op`,你应该得到一个报告第一个有NaN的节点的错误 - 你可以捕获引发的`tf.InvalidArgumentError`,并从它的.op中提取op. `财产.使用op的句柄,您可以访问其`op.inputs [0]`属性以查看哪个张量具有NaN值.
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有