Skip to main content
 首页 » 编程设计

python之计算 tensorflow 梯度

2024年08月15日3252php

我对 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 结构/语法。

请您参考如下方法:

为了比较,考虑实值函数 f :R → R 一个实变量,由 f< 给出/em>(x) = 10 x。这里,f'(x) = 10,与 x 的值无关,所以特别是 f' (0) = 10。

类似地,如教程中所述,或多或少的定义是 total derivative的 (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 < em>a,而关于 b 的导数是 a ↦ 4 b(a ) = 8 一个。因此,在 a = 5 时,我们期望结果为 (3 · 5² + 16 · 5, 8 · 5) = (155, 40),并运行你得到的代码。