代码之家  ›  专栏  ›  技术社区  ›  piccolo

计算张量流梯度

  •  1
  • piccolo  · 技术社区  · 7 年前

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   fuglede    7 年前

    为了进行比较,考虑实值函数 f型 : → 一个实变量,由 f型 ( )=10个 . 在这里, f型 '( )=10,不管 ,特别是 f型 '(0)=10。

    类似地,正如本教程中所解释的,或多或少地按照定义 total derivative 的( , ) + 对于 ( )=2个 是(3,1),它独立于 .

    对于一个不那么简单的例子,让我们考虑一下

    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))
    

    这里,关于 ↦ +2(2) ) = 3+8 变成 +16个 ,而关于 ( )=8个 . 因此,在 =5,我们期望结果是(3.5+16.5,8.5)=(155,40),运行得到的代码。

        2
  •  1
  •   lintang    7 年前

    文档描述了您编写的符号计算总导数。你有两个变量来计算导数: a b . 所以对于导数 ,函数的导数 a+b = a + 2a = 3a w.r.t.公司 也就是3。为了 ,的派生 a+b w.r.t.公司 也就是1。 tf.constant(0.) 意思是你宣布 作为一个常量。如果你宣布 作为一个 tf.variable 相反。