tf.gradients
は、最初の引数としてテンソルのリストを渡したとき、どのくらい正確に動作しますか?この非常に小さな例ください:場合は、Tensorflowのドキュメントによると`ys`テンソルのリストを渡すと、tf.gradientsはどのように動作しますか?
grads = tf.gradients(c, [a, b])
with tf.Session() as sess:
sess.run(grads) # returns (1, 2)
:私は[a,b]
に関して、単一テンソル、c
の勾配を計算する場合
a = tf.constant(5)
b = tf.constant(7)
c = a + 2 * b
を、私は期待される答えを得ますリストのテンソルを最初の引数として渡します。ys
、tf.gradients
は、そのリストの勾配を合計し、2番目の引数の各x
に対してsum_over_ys(dy/dx)
を返します。だから私は期待:
tf.gradients([a, b, c], [a, b])
と同じように動作する:
tf.gradients(a + b + c, [a, b])
は私が間違っているドキュメントを読んでいますか?このコードをテストすると、2番目の式(明示的に合計をa + b + c
とします)の期待結果は[2, 3]
ですが、最初は[2, 1]
となります。 [2, 1]
はどこから来ますか?
奇妙なことに、私が '[tf.identity(a)、tf.identity(b)、c]'に関して微分をとった場合、期待通りにうまく動作します。これはTFのバグですか?何らかの理由で 'ys'のリストに' xs'のいくつかを含めるべきではありませんか? –