2

这是我在 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)

它返回:

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

以上是正确的系数,但grad_2也应该表明我们有 3w^2。我怎样才能找回w^2零件?

4

1 回答 1

1

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

于 2019-11-22T17:28:41.723 回答