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