2016-10-10 13 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] 
    } 
) 

は、その値がギブンス xに反映されます、私は、この定義の後に training_set_xを変更すると言いますか?古い値または新しい変更された値?

つまり、theano関数がコンパイルされたときに、コピーされた式に使用された変数または参照のみが与えられていますか?

私の質問が間違っている場合は、私に修正してください。ありがとうございました。

答えて

0

私の実験では、theano関数のコンパイル中に値が渡されます。すなわち、関数がコンパイルされた後の変数の値の変更は関数の動作に何の影響も与えません。

はその後

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

を次のように私はaを変更した場合今

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

を次のように続いてfの振る舞いがある私は、この

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]}) 

ように私の関数を定義すると言います関数の動作は同じ

関連する問題