Tensorflowのパラメータ行列 "X"に対してテンソル "Y"のグラジエントを計算したいとします。具体的には、与えられた "インデックス"の "X"の集合に対してのみグラデーションを計算したいと思います。Tensorflowの "tf.gather"と "tf.gradients"を併用する
Y=some_function_of_X
grad=tf.gradients(Y,X)
grads_i_want_to_compute=tf.gather(grad,indices)
Tensorflowの「tf.scatter_sub」を使用し、私はその後に基づくパラメータ行列「X」の所望のインデックスを更新することができる:次のコードは、所望のインデックスに対応するそれらの勾配を返し、その後、最初の全体勾配を計算します勾配降下:
tf.scatter_sub(X,indices,learning_rate*grads_i_want_to_compute)
これは適切に機能しますが、最終的にはすべての勾配が計算されます。処理速度のために、私はすべての勾配を計算したくありません。だから私はこれを試した:
Y=some_function_of_X
sparse_X=tf.gather(X,indices)
grads_i_want_to_compute = tf.gradient(Y,sparse_X)
tf.scatter_sub(X,indices,learning_rate*grads_i_want_to_compute)
後者では、 "tf.gradient"は "None"オブジェクトを返すので処理を続行できません。誰もこの問題を解決する方法を知っていますか?