更新 theano 函数中的参数
updates argument in theano functions
以这种方式调用时,"updates" 参数有什么作用?
f_grad_shared = theano.function([x, mask, y], cost, updates=zgup + rg2up,
name='adadelta_f_grad_shared')
我看到的关于 theano 函数中 "updates" 参数的所有文档都讨论了形式对(共享变量,用于更新共享变量的表达式)。但是,这里只有一个表达式,我怎么知道更新了哪个共享变量?
我猜共享变量在某种程度上是隐式的,但 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
谢谢
认为updates
应该是键值对的列表(或字典)是正确的,其中键是共享变量,值是描述如何更新相应共享变量的符号表达式.
这两行创建了对:
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)
]
以这种方式调用时,"updates" 参数有什么作用?
f_grad_shared = theano.function([x, mask, y], cost, updates=zgup + rg2up,
name='adadelta_f_grad_shared')
我看到的关于 theano 函数中 "updates" 参数的所有文档都讨论了形式对(共享变量,用于更新共享变量的表达式)。但是,这里只有一个表达式,我怎么知道更新了哪个共享变量?
我猜共享变量在某种程度上是隐式的,但 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
谢谢
认为updates
应该是键值对的列表(或字典)是正确的,其中键是共享变量,值是描述如何更新相应共享变量的符号表达式.
这两行创建了对:
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)
]