#gpu #theano
#графический процессор #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:
Вы можете записать окончательные результаты, которые используют одни и те же промежуточные результаты, в том же 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 соответствуют разным графам вычислений. Я думаю, что никакие вычисления не могут быть разделены между различными графиками вычислений.
Комментарии:
1. Привет! Когда вы говорите » вы можете записать окончательные результаты «, я не знаю, как я это сделаю. Я не хочу перетасовывать слишком много данных между графическим процессором и оперативной памятью процессора, так как же мне сохранить промежуточный результат после выполнения графика наиболее эффективно в оперативной памяти графических процессоров?
2. @displayname Я добавляю пример в исходный ответ.
3. Но разве это не скопирует данные обратно на хост?