计算张量流梯度
Calculating tensorflow gradients
我对 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]
.
的东西
我相信我在这里误解了 tensorflows structure/syntax。
为了比较,考虑实值函数 f : R → R 的一个实数变量,由 f(x) = 10 x 给出。这里,f'(x) = 10,与x的值无关,所以特别f'(0) = 10.
类似地,正如教程中所解释的,或多或少的定义,total derivative of (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的全导数是a的导数↦a³ + 2(2 a)² = a³ + 8 a² 变成 a ↦ 3 a² + 16 a, 而关于 b[ 的导数=53=] 是 a ↦ 4 b(a) = 8 a 。因此,在 a = 5 处,我们期望结果为 (3 · 5² + 16 · 5, 8 · 5) = (155, 40),并且 运行代码正是您所得到的。
文档描述了您编写的符号计算全导数。您有 2 个变量来计算导数:a
和 b
。所以对于 a
的导数,函数 a+b = a + 2a = 3a
w.r.t a
的导数是 3。对于 b
,a+b
的导数 w.r.t b
即 1。 tf.constant(0.)
表示您将 a
声明为常量值。如果您将 a
声明为 tf.variable
,您可能会想到会发生什么。
我对 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]
.
我相信我在这里误解了 tensorflows structure/syntax。
为了比较,考虑实值函数 f : R → R 的一个实数变量,由 f(x) = 10 x 给出。这里,f'(x) = 10,与x的值无关,所以特别f'(0) = 10.
类似地,正如教程中所解释的,或多或少的定义,total derivative of (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的全导数是a的导数↦a³ + 2(2 a)² = a³ + 8 a² 变成 a ↦ 3 a² + 16 a, 而关于 b[ 的导数=53=] 是 a ↦ 4 b(a) = 8 a 。因此,在 a = 5 处,我们期望结果为 (3 · 5² + 16 · 5, 8 · 5) = (155, 40),并且 运行代码正是您所得到的。
文档描述了您编写的符号计算全导数。您有 2 个变量来计算导数:a
和 b
。所以对于 a
的导数,函数 a+b = a + 2a = 3a
w.r.t a
的导数是 3。对于 b
,a+b
的导数 w.r.t b
即 1。 tf.constant(0.)
表示您将 a
声明为常量值。如果您将 a
声明为 tf.variable
,您可能会想到会发生什么。