首页 > 解决方案 > 计算张量流梯度

问题描述

我对tensorflow 梯度文档中用于计算梯度的示例感到困惑。

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]

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

标签: pythontensorflowcalculus

解决方案


为了比较,考虑一个实变量的实值函数f : RR,由f ( x ) = 10 x给出。这里,f '( x ) = 10,不管x的值如何,所以特别是f '(0) = 10。

类似地,正如教程中所解释的那样,根据定义,( a , b ) ↦ a + b对于b ( a ) = 2 a的总导数是 (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的全导数是aa ³ + 2(2 a )² = a ³ + 8 a ² 的导数,它变成a ↦ 3 a ² + 16 a,而关于b的导数是a ↦ 4 b ( a ) = 8 a。因此,在a = 5 时,我们期望结果为 (3 · 5² + 16 · 5, 8 · 5) = (155, 40),并且运行代码正是你得到的。


推荐阅读