简体   繁体   English

如何在 TensorFlow 2.0 中实现 clip_gradients_by_norm?

[英]How to implement clip_gradients_by_norm in TensorFlow 2.0?

I would like to use tf.contrib.estimator.clip_gradients_by_norm in TF 2.0 as is possible under TF 1.3, however with contrib now gone I need a workaround, or even just some underlying intuition on how it works.我想在 TF 2.0 中使用 tf.contrib.estimator.clip_gradients_by_norm,这在 TF 1.3 下是可能的,但是随着 contrib 现在消失,我需要一个解决方法,甚至只是一些关于它如何工作的潜在直觉。

I am aware that this issue has been raised as an issue on Github ( https://github.com/tensorflow/tensorflow/issues/28707 ) but would like a solution sooner if possible.我知道此问题已在 Github ( https://github.com/tensorflow/tensorflow/issues/28707 ) 上作为问题提出,但如果可能,希望尽快找到解决方案。

# Use gradient descent as the optimizer for training the model.
my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0000001)
my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)

# Configure the linear regression model with our feature columns and optimizer.
# Set a learning rate of 0.0000001 for Gradient Descent.
linear_regressor = tf.estimator.LinearRegressor(
    feature_columns=feature_columns,
    optimizer=my_optimizer
)

More here:更多在这里:

https://colab.research.google.com/notebooks/mlcc/first_steps_with_tensor_flow.ipynb?utm_source=mlcc&utm_campaign=colab-external&utm_medium=referral&utm_content=firststeps-colab&hl=en#scrollTo=ubhtW-NGU802 https://colab.research.google.com/notebooks/mlcc/first_steps_with_tensor_flow.ipynb?utm_source=mlcc&utm_campaign=colab-external&utm_medium=referral&utm_content=firststeps-colab&hl=en#scrollTo=ubhtW-NGU802

I've tried using custom gradients as described here: https://www.tensorflow.org/guide/eager我试过使用这里描述的自定义渐变: https : //www.tensorflow.org/guide/eager

@tf.custom_gradient
def clip_gradient_by_norm(x, norm):
  y = tf.identity(x)
  def grad_fn(dresult):
    return [tf.clip_by_norm(dresult, norm), None]
  return y, grad_fn

with no success.没有成功。

Looking at a comment on this issue https://github.com/tensorflow/tensorflow/issues/28707#issuecomment-502336827 ,查看关于这个问题的评论https://github.com/tensorflow/tensorflow/issues/28707#issuecomment-502336827

I discovered that you can modify your code to look like this:我发现您可以将代码修改为如下所示:

# Use gradient descent as the optimizer for training the model.
from tensorflow.keras import optimizers
my_optimizer = optimizers.SGD(lr=0.0000001, clipnorm=5.0)

# Configure the linear regression model with our feature columns and optimizer.
# Set a learning rate of 0.0000001 for Gradient Descent.
linear_regressor = tf.estimator.LinearRegressor(
    feature_columns=feature_columns,
    optimizer=my_optimizer
)

Instead of:代替:

# Use gradient descent as the optimizer for training the model.
my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0000001)
my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)

# Configure the linear regression model with our feature columns and optimizer.
# Set a learning rate of 0.0000001 for Gradient Descent.
linear_regressor = tf.estimator.LinearRegressor(
    feature_columns=feature_columns,
    optimizer=my_optimizer
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM