我可以存储中间结果吗?

时间:2016-10-16 12:10:48

标签: gpu theano

我想存储中间结果,以避免对一件事进行多次计算。我正在寻找的是这样的:

    h1_activ = sigmoid(self.bias_visiblie + T.dot(D, self.W))
    h1_sample = h1_activ > rnds.uniform((n_samples, self.n_hidden )) 

    f_h1_sample = theano.function(
        inputs=[D],
        outputs=h1_sample,
        # I'd like to take the result from 'h1_sample' and store it into 'H1_sample'
        updates=[(self.H1_sample, ??? )] 
    )

上面的代码当然没有运行但有没有办法做这样的事情?将中间值存储到共享变量中?

1 个答案:

答案 0 :(得分:1)

您可以在同一theano.function中编写使用相同中间结果的最终结果。

例如:

h1_activ = sigmoid(self.bias_visiblie + T.dot(D, self.W))
h1_sample = h1_activ > rnds.uniform((n_samples, self.n_hidden )) 
# h2_sample use the intermediate result h1_sample.
h2_sample = h1_sample * 2

f_h1_sample = theano.function(
    inputs=[D],
    outputs=[h1_sample, h2_sample],
)

h2_smaple是使用h1_sample的最终结果。

您还可以保存中间结果,并将其用作另一个theano.function的输入。

不同的theano.function s对应于不同的计算图。我认为不同的计算图之间不能共享计算。