2013-04-10 6 views
25

theanoで関数をコンパイルする場合、updates=[(X, new_value)]を指定して共有変数(たとえばX)を更新できます。 は、今私は共有変数のサブセットのみ更新しようとしています:Theanoのテンソル共有変数のサブセットをどのように割り当て/更新できますか?

from theano import tensor as T 
from theano import function 
import numpy 

X = T.shared(numpy.array([0,1,2,3,4])) 
Y = T.vector() 
f = function([Y], updates=[(X[2:4], Y)] # error occur: 
             # 'update target must 
             # be a SharedVariable' 

コードは、私が推測する、「SharedVariableでなければならない更新対象」エラーが発生しますが、それは、更新の対象は、非共有変数ではないことを意味し。では、共有変数のサブセットをudpateするための関数をコンパイルする方法はありますか?

答えて

0

このコードは、あなたの問題を解決する必要があります。

from theano import tensor as T 
from theano import function, shared 
import numpy 

X = shared(numpy.array([0,1,2,3,4], dtype='int')) 
Y = T.lvector() 
X_update = (X, X[2:4]+Y) 
f = function(inputs=[Y], updates=[X_update]) 
f([100,10]) 
print X.get_value() 
# output: [102 13] 

そして、ここではintroduction about shared variables in the official tutorialです。

ご不明な点がありましたら、お問い合わせください。

32

使用set_subtensorまたはinc_subtensor

from theano import tensor as T 
from theano import function, shared 
import numpy 

X = shared(numpy.array([0,1,2,3,4])) 
Y = T.vector() 
X_update = (X, T.set_subtensor(X[2:4], Y)) 
f = function([Y], updates=[X_update]) 
f([100,10]) 
print X.get_value() # [0 1 100 10 4] 

Theanoよくある質問では、この程度のページ今あります:私の一日を救っhttp://deeplearning.net/software/theano/tutorial/faq_tutorial.html

+0

+1が。ありがとう! – displayname

+1

そして、非連続値を更新するには: 'X_update =(X、T.set_subtensor(X [[2,4]]、Y))' –

+2

[Here](http://deeplearning.net/software/theano/tutorial/ faq_tutorial.html)、 'inc_subtensor'は' set_subtensor'よりも好まれます – Kirbies

関連する問題