0

我试图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=5, the op=(2*5)+(5*5)=>35, and if I are calculating the derivative of a constantthendiff should be 0

我理解它的原因12,因为它不采用varas5而是(2*var)+(var*var)=> 2var+var**2计算这个函数的导数2+2*var=>12

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

4

1 回答 1

1

它正在产生正确的结果。
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成立。

于 2021-12-09T21:29:22.993 回答