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=5
、op=(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
成立。
我试图在以下代码中理解 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
、op=(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
成立。