Tensorflow:tf.gradients()究竟返回什么

Tensorflow:tf.gradients()究竟返回什么,tensorflow,linear-algebra,derivative,Tensorflow,Linear Algebra,Derivative,快速提问,因为我有点困惑 假设我们有一个简单的图表: a = tf.Variable(tf.truncated_normal(shape=[200, 1], mean=0., stddev=.5)) b = tf.Variable(tf.truncated_normal(shape=[200, 100], mean=0., stddev=.5)) add = a+b add <tf.Tensor 'add:0' shape=(200, 100) dtype=float32> #sh

快速提问,因为我有点困惑

假设我们有一个简单的图表:

a = tf.Variable(tf.truncated_normal(shape=[200, 1], mean=0., stddev=.5))
b = tf.Variable(tf.truncated_normal(shape=[200, 100], mean=0., stddev=.5))
add = a+b

add
<tf.Tensor 'add:0' shape=(200, 100) dtype=float32> #shape is because of broadcasting
a=tf.Variable(tf.truncated_normal(shape=[200,1],mean=0,stddev=.5))
b=tf.变量(tf.截断_正常值(形状=200100],平均值=0,标准差=0.5))
相加=a+b
添加
#形状是因为广播
我有一个节点,它接受2个张量,产生1个张量作为输出。现在让我们在上面运行tf.gradients

tf.gradients(add, [a, b])
[<tf.Tensor 'gradients/add_grad/Reshape:0' shape=(200, 1) dtype=float32>,
 <tf.Tensor 'gradients/add_grad/Reshape_1:0' shape=(200, 100) dtype=float32>]
tf.渐变(添加[a,b])
[,
]
所以我们得到了输入张量形状的梯度。但是为什么? 不像是有一个度量,我们可以对它进行偏导数。难道梯度不应该从输入张量的每个值映射到输出张量的每个值,从而有效地为输入a提供200x1x200x100的梯度吗

这只是一个简单的例子,其中输出张量的每个元素只依赖于张量b的一个值和张量a的一行。然而,如果我们做一些更复杂的事情,比如在张量上运行高斯模糊,那么梯度肯定会大于输入张量


我这里错了什么?

默认情况下,tf.gradients通过将传递给tf.gradients的所有张量的所有元素相加得到的标量的梯度作为输出