2016-10-16 3 views
1

中間結果を保存して、1つの事の複数の計算を避けたい。私が探しているものは、次のようなものです:中間結果を保存することはできますか?

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

同じ中間結果を使用する最終結果を同じ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は、異なる計算グラフに対応します。私は、異なる計算グラフ間で計算を共有することはできないと思います。

+0

こんにちは! 「*あなたは最終結果を書くことができます」と言うとき、私はそれをどうやってやるのか分かりません。私はGPUとCPU RAMの間であまりにも多くのデータをシャッフルしたくないので、GPUのRAM上で最も効率的にグラフを実行した後に中間結果を保存するにはどうすればよいですか? – displayname

+0

@displayname元の回答に例を追加します。 –

+0

これはデータをホストにコピーしませんか? – displayname

関連する問題