2013-04-10 16 views
25

Quando si compila una funzione in theano, è possibile aggiornare una variabile condivisa (ad esempio X) specificando updates=[(X, new_value)]. Ora sto cercando di aggiornare solo sottoinsieme di una variabile condivisa:Come posso assegnare/aggiornare sottoinsieme della variabile condivisa del tensore in 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' 

I codici alzerà un errore di "target aggiornamento deve essere uno SharedVariable" Credo che significa obiettivi aggiornamento non può essere variabili non condivise . Quindi c'è un modo per compilare una funzione solo per udire un sottoinsieme di variabili condivise?

risposta

0

Questo codice dovrebbe risolvere il problema:

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] 

Ed ecco il introduction about shared variables in the official tutorial.

Si prega di chiedere, se avete ulteriori domande!

32

Usa set_subtensor o 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] 

ora C'è una pagina di questo nel Theano FAQ: http://deeplearning.net/software/theano/tutorial/faq_tutorial.html

+0

uno che ha salvato la mia giornata. Grazie! – displayname

+1

E per aggiornare i valori non continui: 'X_update = (X, T.set_subtensor (X [[2,4]], Y))' –

+2

[Qui] (http://deeplearning.net/software/theano/tutorial/ faq_tutorial.html) dice che "inc_subtensor" è preferito a "set_subtensor" – Kirbies

Problemi correlati