2016-10-10 6 views
0

Это определение функции train_model.Изменение переменных, используемых в givens

train_model = theano.function(
    [index], 
    cost, 
    updates=updates, 
    givens={ 
     x: train_set_x[index * batch_size: (index + 1) * batch_size], 
     y: train_set_y[index * batch_size: (index + 1) * batch_size] 
    } 
) 

Скажите, что я изменить training_set_x после этого определения, какое значение будет отражать в данности x? Старое значение или новое измененное значение?

Другими словами, когда скомпилирована функция anano, используются ли переменные, используемые в скопированных выражениях или только ссылка?

Пожалуйста, исправьте меня, если мой вопрос неверен. Спасибо.

ответ

0

Мои эксперименты дали, что такие переменные передаются по значению при компиляции функции anano, т.е. любое изменение значения переменной после компиляции функции не влияет на поведение функции.

Say я определяю моя функция как этот

x=T.lscalar('x') 
y=T.lscalar('y') 
z=x+y 
i=T.lscalar('i') 

a=theano.shared(np.asarray([1,2,3,4])) 
f=function([i],z,givens={x:a[i],y:a[i]}) 

Тогда f «s поведение выглядит следующим образом

>>> f(0) 
array(2) 
>>> f(1) 
array(4) 
>>> f(2) 
array(6) 
>>> f(3) 
array(8) 

Теперь, если я изменить a следующим

a=theano.shared(np.asarray([0,0,0,0])) 

Тогда поведение функции остается неизменным.

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