【问题标题】:Keras + Tensorflow : Debug NaNsKeras + Tensorflow:调试 NaN
【发布时间】:2017-11-11 18:03:33
【问题描述】:

这是一个很好的问题,关于如何在张量流图中找到 Nan 的第一次出现:

Debugging nans in the backward pass

答案很有帮助,下面是其中的代码:

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

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

显然,同时运行训练和数值检查会导致第一次遇到Nan时报错。

如何将其集成到 Keras 中? 在文档中,我找不到任何类似这样的内容。

我也检查了代码。 更新步骤在这里执行: https://github.com/fchollet/keras/blob/master/keras/engine/training.py

有一个名为_make_train_function 的函数,其中创建了计算损失和应用更新的操作。稍后调用它来训练网络。

我可以像这样更改代码(总是假设我们在 tf 后端运行):

check_op = tf.add_check_numerics_ops()

self.train_function = K.function(inputs, 
    [self.total_loss] + self.metrics_tensors + [check_op],
    updates=updates, name='train_function', **self._function_kwargs)

我目前正在尝试正确设置它,但不确定上面的代码是否真的有效。 也许有更简单的方法?

【问题讨论】:

  • 如果这行得通,您找到答案了吗?我遇到了和你去年一样的问题。

标签: python machine-learning tensorflow neural-network keras


【解决方案1】:

我遇到了完全相同的问题,并找到了check_add_numerics_ops() 函数的替代方法。我没有走这条路,而是使用 TensorFlow 调试器来遍历我的模型,按照https://www.tensorflow.org/guide/debugger 中的示例来确定我的代码在哪里生成nans。这个 sn-p 应该可以用调试会话替换 Keras 正在使用的 TensorFlow 会话,允许您使用tfdbg

from tensorflow.python import debug as tf_debug
sess = K.get_session()
sess = tf_debug.LocalCLIDebugWrapperSession(sess)
K.set_session(sess)

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 2016-12-13
    • 2019-09-05
    • 2021-10-12
    • 2019-10-30
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多