Что делает аргумент «обновления», когда он вызывается таким образом?
f_grad_shared = theano.function([x, mask, y], cost, updates=zgup + rg2up,
name='adadelta_f_grad_shared')
Вся документация, которую я видел об аргументе «обновления» в функциях theano, говорит о парах формы (общие переменные, выражение, используемое для обновления общей переменной). Однако здесь есть только выражение, так как узнать, какая общая переменная обновлена?
Я предполагаю, что общая переменная каким-то образом неявна, но zgup
и rg2up
зависят от разных общих переменных:
zipped_grads = [theano.shared(p.get_value() * numpy_floatX(0.),
name='%s_grad' % k)
for k, p in tparams.iteritems()]
running_grads2 = [theano.shared(p.get_value() * numpy_floatX(0.),
name='%s_rgrad2' % k)
for k, p in tparams.iteritems()]
zgup = [(zg, g) for zg, g in zip(zipped_grads, grads)]
rg2up = [(rg2, 0.95 * rg2 + 0.05 * (g ** 2))
for rg2, g in zip(running_grads2, grads)]
Этот код взят из lstm.py
в http://deeplearning.net/tutorial/lstm.html.
Спасибо