0
tf.gradients
在傳遞張量列表作爲第一個參數時的表現如何?就拿這個非常小的例子:當傳遞`ys`張量列表時,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_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.identity(a)中,tf.identity(B),C]'。這是TF中的一個錯誤,還是因爲某種原因,你不應該在'ys'列表中包含一些'xs'? –