Iss*_*sac 5 machine-learning mathematical-optimization deep-learning tensorflow
所有,
当您使用大量样本训练大型模型时,某些样本可能会在参数更新时导致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))
Run Code Online (Sandbox Code Playgroud)
yue*_*ngz 10
您可以通过以下方式检查您的渐变是否具有NaN tf.check_numerics:
grad_check = tf.check_numerics(clipped_gradients)
with tf.control_dependencies([grad_check]):
self.optimizer = opt.apply_gradients(zip(clipped_gradients, params))
Run Code Online (Sandbox Code Playgroud)
如果clipped_gradients是NaN或无穷大,grad_check则会抛出InvalidArgument.
将tf.control_dependencies可确保grad_check在应用梯度之前评估.
另见tf.add_check_numerics_ops().
| 归档时间: |
|
| 查看次数: |
3955 次 |
| 最近记录: |