2016-10-16 2 views
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

관련 문제