繁体   English   中英

传递`ys`张量列表时,tf.gradients如何表现?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM