4

要素ごとのグラデーションを実行しようとしています

例えば、

output-f(x): 5 x 1 ベクトル、

入力 X に関して: 5 x 1 ベクトル

私はこれを次のように行うことができます、

 import theano
 import theano.tensor as T

 X = T.vector('X')   

 f = X*3    

 [rfrx, []] = theano.scan(lambda j, f,X : T.grad(f[j], X), sequences=T.arange(X.shape[0]), non_sequences=[f,X])

 fcn_rfrx = theano.function([X], rfrx)

 fcn_rfrx(np.ones(5,).astype(float32))

結果は

array([[ 3.,  0.,  0.,  0.,  0.],
       [ 0.,  3.,  0.,  0.,  0.],
       [ 0.,  0.,  3.,  0.,  0.],
       [ 0.,  0.,  0.,  3.,  0.],
       [ 0.,  0.,  0.,  0.,  3.]], dtype=float32)

しかし効率が悪いので、結果として5×1のベクトルを取得したい

のようなことをすることによって..

 [rfrx, []] = theano.scan(lambda j, f,X : T.grad(f[j], X[j]), sequences=T.arange(X.shape[0]), non_sequences=[f,X])

これは機能しません。

これを行う方法はありますか?(形式が悪くてすみません..私はここに新しく、学習しています)


(より明確な例を追加しました):

指定された入力ベクトル: x[1]、x[2]、...、x[n]

および出力ベクトル: y[1]、y[2]、..、y[n]、

ここで、y[i] = f(x[i]) です。

の結果が欲しい

df(x[i])/dx[i] のみ

ではなく

df(x[i])/dx[j] for (i<>j)

、計算効率のため (n はデータ数 > 10000)

4

1 に答える 1