Tensorflow梯度带计算

Tensorflow gradient tape calculation

我试图在以下代码中理解 TF GRADIENT TAPE 的目的:

import tensorflow as tf
var = tf.Variable(5.0)
with tf.GradientTape() as tape:
    op = (2*var)+(var*var)
    diff = tape.gradient(op,var)
print (diff)

操作:

diff = tf.Tensor(12.0, shape=(), dtype=float32)

我很困惑,因为 var=5op=(2*5)+(5*5)=>35,如果我是 calculating the derivative of a constant,那么 diff should be 0

我理解它的原因 12,因为它没有将 var 作为 5 而不是 (2*var)+(var*var)=> 2var+var**2 所以计算这个函数的导数变成 2+2*var=>12.

但我不明白的是,为什么不考虑 var 给出的值?

它产生了正确的结果。
tf.GradientTape 会自动记录每一个操作的上下文 这涉及到一个变量。 如果您考虑以下函数关于 var

的偏导数
def v(var):
  return 2 * var + var * var

会是2 + 2*var,当var=5的值是2 + 2*5,也就是下面渐变返回的12。

var = tf.Variable(5.0)
with tf.GradientTape() as tape:
  z = v(var)
diff = tape.gradient(z,var)
print (diff)
tf.Tensor(12.0, shape=(), dtype=float32)

尝试将变量更改为不同的值,对于函数 v,等式 2 + 2*var 成立。