修改givens中使用的变量

时间:2016-10-10 04:41:53

标签: theano

这是train_model函数的定义。

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中?旧值还是新修改后的值?

换句话说,当编译theano函数时,是复制的表达式中使用的变量还是仅给出了引用?

如果我的问题错了,请纠正我。谢谢。

1 个答案:

答案 0 :(得分:0)

我的实验已经得出这样的变量在编译theano函数时通过值传递,即在编译函数之后变量值的任何变化都不会对函数的行为产生任何影响。

说我像这样定义我的功能

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的行为如下

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

然后该功能的行为保持不变