machine-learning - 更新时如何检查 Tensorflow 中梯度的 NaN?

标签 machine-learning tensorflow deep-learning mathematical-optimization

全部,

当您训练具有大量样本的大型模型时,某些样本在参数更新时可能会导致 NaN 梯度。

我想找到这些样本。同时我不希望这批样本的梯度更新模型的参数,因为这可能会导致模型的参数为NaN。

那么有人有解决这个问题的好主意吗?

我的代码如下:

    # Create an optimizer.
    params = tf.trainable_variables()
    opt = tf.train.AdamOptimizer(1e-3)
    gradients = tf.gradients(self.loss, params)

    max_gradient_norm = 10
    clipped_gradients, self.gradient_norms = tf.clip_by_global_norm(gradients,
                                                     max_gradient_norm)

    self.optimizer = opt.apply_gradients(zip(clipped_gradients, params))

最佳答案

您可以通过tf.check_numerics检查渐变是否为NaN:

grad_check = tf.check_numerics(clipped_gradients)
with tf.control_dependencies([grad_check]):
  self.optimizer = opt.apply_gradients(zip(clipped_gradients, params))

如果 Clipped_gradients 为 NaN 或无穷大,grad_check 将抛出 InvalidArgument

tf.control_dependency 确保在应用渐变之前评估 grad_check

另请参阅tf.add_check_numerics_ops()

关于machine-learning - 更新时如何检查 Tensorflow 中梯度的 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40701712/

相关文章:

tensorflow - 如何定制 AlexNet 以适应不同的用途

algorithm - 使用 Kullback 散度的字符散度

python - 如何使用 pytorch 计算 softmax 回归的成本

java - Java的支持 vector 机?

r - 仅训练 R MXNet 数据集中可预测样本的最佳方法

python - 使用 TensorFlow 进行验证和测试

android - Tensorflow 自定义 TFLite java.lang.NullPointerException : Cannot allocate memory for the interpreter

tensorflow - 从长远来看, `config.gpu_options.allow_growth=True` 会降低性能吗?

image - 我们可以使用经过图像分类训练的模型来帮助 tensorflow 中的对象检测吗?

python - 如何使用leveldb以及我可以在pycaffe界面中使用什么样的dataLayer?