当前位置: 代码迷 >> python >> 渴望执行:梯度计算
  详细解决方案

渴望执行:梯度计算

热度:65   发布时间:2023-07-14 08:46:21.0

我想知道为什么这种非常简单的梯度计算无法正常工作。 它实际上是在生成[None,None]向量。 显然,这不是所需的输出。

import tensorflow as tf
tf.enable_eager_execution()

a = tf.constant(0.)
with tf.GradientTape() as tape:
    b = 2 * a
da, db = tape.gradient(a + b, [a, b])
print(da)
print(db)

您发布的代码段存在两个小问题:

  1. a + b计算是在磁带上下文之外进行的,因此不会被记录。 请注意, GradientTape只能区分记录的计算。 在磁带上下文中计算a + b将解决此问题。

  2. 源张量需要“监视”。 有两种向磁带发出信号的信号:应该监视张量:(a)显式调用 ,或(b)使用tf.Variable (监视所有变量),请参阅

长话短说,对片段进行两个简单的修改就可以解决问题:

import tensorflow as tf
tf.enable_eager_execution()

a = tf.constant(0.)
with tf.GradientTape() as tape:
    tape.watch(a)
    b = 2 * a
    c = a + b
da, db = tape.gradient(c, [a, b])
print(da)
print(db)

希望能有所帮助。

  相关解决方案