2016-10-12 9 views
3

、1、2つのテンソルxyを持ち、もう1つはtf.gradients(y,x)を使用してxに対するyの勾配を持つようにしたい場合。実際に得られるものは次のとおりです。Tensorflow勾配:tensorflowで自動暗黙の合計なし

gradient[n,m] = sum_ij d y[i,j]/ d x[n,m] 

yのインデックスには合計があります。この暗黙的な合計を避ける方法はありますか?グラジエントテンソル全体を得るにはgradient[i,j,n,m]

答えて

3

方法はありません。 TensorFlow 0.11 tf.gradientsは、スカラー量の導関数を与える標準逆モードADを実装します。あなたは周りの私の仕事は(も@Yaroslavでmentionnedとして)だけで、各成分の微分を取った後、ランクの場合には、再び一緒に2つのテンソルを、それらをすべて梱包されてここで個別に各y[i,j]

4

ためtf.gradientsを呼び出す必要があると思います(マトリックス):

import tensorflow as tf 

def twodtensor2list(tensor,m,n): 
    s = [[tf.slice(tensor,[j,i],[1,1]) for i in range(n)] for j in range(m)] 
    fs = [] 
    for l in s: 
     fs.extend(l) 
    return fs 

def grads_all_comp(y, shapey, x, shapex): 
    yl = twodtensor2list(y,shapey[0],shapey[1]) 
    grads = [tf.gradients(yle,x)[0] for yle in yl] 
    gradsp = tf.pack(grads) 
    gradst = tf.reshape(gradsp,shape=(shapey[0],shapey[1],shapex[0],shapex[1])) 
    return gradst 

grads_all_comp(y, shapey, x, shapex)意志出力所望の形式でランク4テンソル。すべてをスライスアップして一緒に再パックする必要があるので、非常に非効率的な方法です。誰かがより良いものを見つけたら、私はそれを見ることに非常に興味があります。

関連する問題