计算张量流梯度

时间:2018-08-04 13:10:40

标签: python tensorflow calculus

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]的信息。

我相信我在这里误解了张量流的结构/语法。

2 个答案:

答案 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个变量来计算导数:ab。因此,对于a的导数,函数a+b = a + 2a = 3a wrt a的导数为3。对于ba+b wrt {{1}的导数},即1。b表示您将tf.constant(0.)声明为常量。如果您将a声明为a,那么您可能会想到的事情。