tensorflow gradient documentation中的示例对计算梯度感到困惑。
a = tf.constant(0.)
b = 2 * a
g = tf.gradients(a + b, [a, b])
with tf.Session() as sess:
print(sess.run(g))
给出[3.0, 1.0]
我觉得我确实缺少明显的东西,但是如果a
本质上是0
,那么b
就是a+b =0
。那么,相对于a和b的零为零如何为您提供类似[3.0, 1.0]
的信息。
我相信我在这里误解了张量流的结构/语法。
答案 0 :(得分:2)
为进行比较,请考虑一个实变量的实值函数 f : R → R ,由 f < / em>( x )= 10 x 。在这里, f '( x )= 10,与 x 的值无关,因此特别是 f ' (0)= 10。
类似地,如本教程中所述,按照定义,或多或少地,( a , b )↦ a 的total derivative对于 b ( a )= 2 a 的em> + b 是(3,1),这是独立的的 a 。
举个简单的例子,让我们考虑
a = tf.constant(5.)
b = 2 * a
g = tf.gradients(a**3 + 2*b**2, [a, b])
with tf.Session() as sess:
print(sess.run(g))
在这里,关于 a 的总导数是 a ↦ a ³+ 2(2 a < / em>)²= a ³+ 8 a ²变为 a ↦3 a ²+ 16 < em> a ,而关于 b 的导数是 a ↦4 b ( a )= 8 a 。因此,在 a = 5的情况下,我们期望结果为(3·5²+ 16·5、8·5)=(155,40),并运行所获得的代码。
答案 1 :(得分:1)
文档描述您编写的符号计算了总导数。您有2个变量来计算导数:a
和b
。因此,对于a
的导数,函数a+b = a + 2a = 3a
wrt a
的导数为3。对于b
,a+b
wrt {{1}的导数},即1。b
表示您将tf.constant(0.)
声明为常量。如果您将a
声明为a
,那么您可能会想到的事情。