[英]How does tf.gradients behave when passed a list of `ys` tensors?
将张量列表作为第一个参数传递时, 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文档,如果您将张量列表作为第一个参数ys
tf.gradients
,则tf.gradients
将对该列表上的梯度求和,为第二个参数中的每个x
返回sum_over_ys(dy/dx)
。 所以我期望:
tf.gradients([a, b, c], [a, b])
行为与以下方式相同:
tf.gradients(a + b + c, [a, b])
我读的文档错了吗? 当我测试该代码时,得到预期的结果[2, 3]
为第二个表达式(明确地求和a + b + c
),但[2, 1]
为先。 [2, 1]
来自哪里?
这是因为您使用的是tf.constant
,从理论tf.constant
,它应该不受输入的影响。
如果您用其他任何内容(例如Variables
)替换实验,则它会按预期运行。
当您将操作员的常数(无论是增加,甚至身份),您将获得一个新的张量不是constant
,即使他们depand上constant
仅s -因此你获得预期的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.