通过有状态对象获取梯度

问题描述

我已经开始通过官方指南学习TensorFlow:https://www.tensorflow.org/guide

我的理解力正在与名为“自动微分”的指南的一部分,特别是“通过有状态的对象获取梯度”的部分进行斗争。

我不明白他们为什么说有状态对象会停止渐变。指南给出了这段代码

x0 = tf.Variable(3.0)
x1 = tf.Variable(0.0)

with tf.GradientTape() as tape:
  # Update x1 = x1 + x0.
  x1.assign_add(x0)
  # The tape starts recording from x1.
  y = x1**2   # y = (x1 + x0)**2

# This doesn't work.
print(tape.gradient(y,x0))   #dy/dx0 = 2*(x1 + x0)

为什么梯度不记录x0?!是这个函数 .assign_add(x0) 增加x1 overshadow x0?是因为 assign_add 会选择 x0 的值并窃取其分配的内存吗?这是正确的原因还是我没有看到的另一个原因?

预先感谢您的回答。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)