2013-04-10 2 views
25

При компиляции функции в theano, общая переменная (скажем, X) может быть обновлена ​​путем указания updates=[(X, new_value)]. Теперь я пытаюсь обновить только подмножество общей переменной:Как назначить/обновить подмножество общей переменной тензора в 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 FAQ: http://deeplearning.net/software/theano/tutorial/faq_tutorial.html

+0

+1 Это спасло мой день. Благодаря! – displayname

+1

И для обновления не непрерывных значений: 'X_update = (X, T.set_subtensor (X [[2,4]], Y))' –

+2

[Здесь] (http://deeplearning.net/software/theano/tutorial/ faq_tutorial.html) говорится, что 'inc_subtensor' является предпочтительным для' set_subtensor' – Kirbies

Смежные вопросы