2015-07-22 5 views
3

Что делает аргумент «updates» при вызове таким образом?обновляет аргумент в функциях anano

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

Благодарности

ответ

3

Это правильно что updates должен быть списком (или словарем) пар ключей, где ключ является общей переменной, а значение равно ymbolic выражение, описывающее, как обновить соответствующую общую переменную.

Эти две строки создают пары:

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)] 

zipped_grads и running_grads2 были созданы в предыдущих строках каждый только список общих переменных. Здесь эти общие переменные связаны с обновлениями с помощью функции Python zip, которая испускает список пар. В самом деле, первое из этих линий можно было бы заменить

zgup = zip(zipped_grads, grads) 

Этот код является довольно сложным, поскольку он реализует механизм обновления AdaDelta. Если вы хотите увидеть, как updates работает в более простой настройке, взгляните на базовое стохастическое обновление спуска градиента в Theano MLP tutorial.

updates = [ 
     (param, param - learning_rate * gparam) 
     for param, gparam in zip(classifier.params, gparams) 
    ] 
Смежные вопросы