Tensorflow 2.0中的梯度计算

时间:2019-11-22 17:10:32

标签: tensorflow derivative gradienttape

这是我在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部分?

1 个答案:

答案 0 :(得分: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操作的序列,因此从中提取一个好的数学表达式并不容易。急切地执行(如您所用)时,它甚至不可用,操作将在必要时执行,而中间件将被丢弃。