Tensorflow 2.0 中的梯度计算

Gradient computations in Tensorflow 2.0

这是我在 Tensorflow 2.0 中的示例:

import tensorflow as tf

w = tf.Variable([[1.0]])
with tf.GradientTape() as tape_1:
    loss_1 = w * w


with tf.GradientTape() as tape_2:
    loss_2 = w * w * w

grad_1 = tape_1.gradient(loss_1, w)
grad_2 = tape_2.gradient(loss_2, w)
print(grad_1)
print(grad_2)

它returns:

tf.Tensor([[2.]], shape=(1, 1), dtype=float32)
tf.Tensor([[3.]], shape=(1, 1), dtype=float32)

以上是正确的系数,但是grad_2应该也说明我们有3w^2。如何检索 w^2 部分?

梯度结果不是这个意思。如果你采用你的函数,f(w) = w2 和 g(w) = w3,它们各自关于 w 的导数函数将会 f'(w) = 2w 和 g'(w) = 3w2。梯度函数给你的是这些函数对于w的当前值的值。所以,由于 w 被初始化为 1,它给你 f'(1) = 2 和 g'(1) = 3。TensorFlow 可以在某种程度上计算符号导数函数,但是作为 TensorFlow 操作的序列,所以从中提取一个好的数学表达式并不简单。并且随着急切的执行,正如你所使用的,它甚至不可用,必要时执行操作并丢弃中间体。