传递一个“ys”张量列表时,tf.gradients如何表现?

时间:2017-07-17 18:16:36

标签: python tensorflow gradients

tf.gradients在传递张量列表作为第一个参数时的行为究竟如何?举一个很小的例子:

a = tf.constant(5)
b = tf.constant(7)
c = a + 2 * b

如果我计算单个张量的渐变c,相对于[a,b],我会得到预期的答案:

grads = tf.gradients(c, [a, b])
with tf.Session() as sess:
    sess.run(grads) # returns (1, 2)

根据Tensorflow文档,如果您传递张量的列表作为第一个参数ystf.gradients将对该列表上的渐变进行求和,返回{{ 1}}对于你的第二个参数中的每个sum_over_ys(dy/dx)。所以我希望:

x

的行为方式与:

相同
tf.gradients([a, b, c], [a, b])

我读错了文档吗?当我测试此代码时,我得到第二个表达式的预期结果tf.gradients(a + b + c, [a, b]) (明确求和[2, 3]),但第一个得到a + b + c[2, 1]来自哪里?

1 个答案:

答案 0 :(得分:1)

这是因为你使用的是tf.constant,理论上它不应受输入的影响。

如果您将实验替换为其他任何内容(例如Variables),它将按预期工作。

当你将一个运算符应用于常量(无论是加法,还是偶数)时,你得到一个不是constant的新张量,即使它们只在constant上展开 - 并且因此,您获得了预期的行为。