Tensorflow 2.0 中“Tensor.grad”的等效语法是什么
what is the equivalent sytax for `Tensor.grad` in Tensorflow 2.0
在Pytorch中,我们可以通过
访问变量x
的梯度
z.grad
Tensorflow 2
中的相同语法是什么?我的目标是削减渐变。这是 Pytorch 代码
if z.grad > 1000:
z.grad = 10
tensorflow 2可以应用相同的功能吗?
谢谢
所以在 TF2 中,假设我们定义了以下变量和优化器:
import tensorflow as tf
from tensorflow import keras
opt = tf.keras.optimizers.Adam(learning_rate=0.1)
x = tf.Variable([3.0, 4.0])
y = tf.Variable([1.0, 1.0, 1.0, 1.0])
var_list = [x, y]
然后我们可以使用tf.GradientTape()
:
得到梯度
with tf.GradientTape() as tape:
loss = tf.reduce_sum(x ** 2) + tf.reduce_sum(y)
grads = tape.gradient(loss, var_list)
终于可以通过自定义函数处理渐变了:
def clip_grad(grad):
if grad > 1000:
grad = 10
return grad
processed_grads = [tf.map_fn(clip_grad, g) for g in grads]
opt.apply_gradients(zip(processed_grads, var_list))
请注意,您可能会发现 keras 优化器具有 get_gradients
方法,但它无法在 TF2 中默认启用 eager execution
的情况下使用,如果您想使用它,那么您可能必须以 TF1 的方式编写代码
在Pytorch中,我们可以通过
访问变量x
的梯度
z.grad
Tensorflow 2
中的相同语法是什么?我的目标是削减渐变。这是 Pytorch 代码
if z.grad > 1000:
z.grad = 10
tensorflow 2可以应用相同的功能吗?
谢谢
所以在 TF2 中,假设我们定义了以下变量和优化器:
import tensorflow as tf
from tensorflow import keras
opt = tf.keras.optimizers.Adam(learning_rate=0.1)
x = tf.Variable([3.0, 4.0])
y = tf.Variable([1.0, 1.0, 1.0, 1.0])
var_list = [x, y]
然后我们可以使用tf.GradientTape()
:
with tf.GradientTape() as tape:
loss = tf.reduce_sum(x ** 2) + tf.reduce_sum(y)
grads = tape.gradient(loss, var_list)
终于可以通过自定义函数处理渐变了:
def clip_grad(grad):
if grad > 1000:
grad = 10
return grad
processed_grads = [tf.map_fn(clip_grad, g) for g in grads]
opt.apply_gradients(zip(processed_grads, var_list))
请注意,您可能会发现 keras 优化器具有 get_gradients
方法,但它无法在 TF2 中默认启用 eager execution
的情况下使用,如果您想使用它,那么您可能必须以 TF1 的方式编写代码