python - from - ¿Cómo puedo asignar/actualizar un subconjunto de la variable compartida tensor en Theano?
theano wiki (2)
Este código debería resolver su 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]
Y aquí está la introducción sobre variables compartidas en el tutorial oficial .
Por favor pregunte, si tiene más preguntas!
Al compilar una función en theano
, una variable compartida (por ejemplo, X) se puede actualizar especificando updates=[(X, new_value)]
. Ahora estoy intentando actualizar solo el subconjunto de una variable compartida:
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''
Los códigos generarán un error "el objetivo de actualización debe ser una variable compartida", supongo que eso significa que los objetivos de actualización no pueden ser variables no compartidas. Entonces, ¿hay alguna forma de compilar una función para simplemente eliminar un subconjunto de variables compartidas?
Utilice 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]
Ahora hay una página sobre esto en las preguntas frecuentes de Theano: http://deeplearning.net/software/theano/tutorial/faq_tutorial.html