2013-04-10 3 views
25

Beim Kompilieren einer Funktion in theano kann eine gemeinsam genutzte Variable (zB X) durch Angabe von updates=[(X, new_value)] aktualisiert werden. Jetzt versuche ich nur Teilmenge einer gemeinsamen Variablen zu aktualisieren:Wie kann ich die Teilmenge der Tensor-Variablen in Theano zuweisen/aktualisieren?

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' 

Die Codes ein Fehler „Update Ziel muss ein SharedVariable sein“ erheben, ich denke, das bedeutet, dass Ziele Update nicht nicht gemeinsam genutzten Variablen sein können . Gibt es also eine Möglichkeit, eine Funktion zu kompilieren, um nur Teilmengen von gemeinsam genutzten Variablen zu udpaten?

Antwort

0

Dieser Code sollte Ihr Problem lösen:

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] 

Und hier ist die introduction about shared variables in the official tutorial.

Bitte fragen Sie, wenn Sie weitere Fragen haben!

32

Verwenden set_subtensor oder 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] 

Es gibt jetzt eine Seite darüber im Theano FAQ: http://deeplearning.net/software/theano/tutorial/faq_tutorial.html

+0

+1 Das ist mein Tag gerettet. Vielen Dank! – displayname

+1

Und um nicht kontinuierliche Werte zu aktualisieren: 'X_update = (X, T.set_subtensor (X [[2,4]], Y))' –

+2

[Hier] (http://deeplearning.net/software/theano/tutorial/ faq_tutorial.html) besagt, dass 'inc_subtensor' dem 'set_subtensor' vorgezogen wird – Kirbies

Verwandte Themen