2016-10-16 4 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 s соответствуют разным графикам вычислений. Я думаю, что никакие вычисления не могут быть разделены между различными графиками вычислений.

+0

Hi! Когда вы говорите «* вы можете написать окончательные результаты», я не знаю, как это сделать. Я не хочу перетасовывать слишком много данных между графическим процессором и ОЗУ процессора, так как я могу сохранить промежуточный результат после наиболее эффективного выполнения графика в ОЗУ GPU? – displayname

+0

@displayname Я добавляю пример в исходный ответ. –

+0

Но не скопирует ли данные данные на хост? – displayname

Смежные вопросы