这是我的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
部分?
梯度结果并不意味着那样。如果采用函数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操作的序列,因此从中提取一个好的数学表达式并不容易。而且,由于急切执行(如您所使用的那样),它甚至不可用,将在必要时执行操作,并丢弃中间体。