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