Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当传递一个'ys'张量列表时,tf.gradients的行为如何?_Python_Tensorflow_Gradient - Fatal编程技术网

Python 当传递一个'ys'张量列表时,tf.gradients的行为如何?

Python 当传递一个'ys'张量列表时,tf.gradients的行为如何?,python,tensorflow,gradient,Python,Tensorflow,Gradient,当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文档,如果传

当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将对该列表上的梯度求和,并为第二个参数中的每个x返回sum_over_ysdy/dx。因此,我希望:

tf.gradients([a, b, c], [a, b])
与以下行为相同:

tf.gradients(a + b + c, [a, b])

我看错文件了吗?当我测试这段代码时,我得到了第二个表达式显式求和a+b+c的预期结果[2,3],但是第一个表达式得到了[2,1]。这[2,1]从何而来?

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

如果你用其他任何东西代替你的实验,例如变量,它会按预期工作


当你对常数应用一个操作符,无论是加法还是恒等式,你会得到一个新的张量,它不是常数,即使它们只对常数进行除法-因此你会得到预期的行为。

奇怪的是,如果我对[tf.identitya,tf.identityb,c]取导数,它会像预期的那样工作。这是TF中的一个bug,还是出于某种原因,您不应该在ys列表中包含一些X?