“更新”参数在这种情况下会做什么?
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 in http://deeplearning.net/tutorial/lstm.html
谢谢
发布于 2015-07-22 09:01:32
正确的想法是,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函数链接到更新,该函数会发出一个对的列表。实际上,这些行的第一行可以替换为
zgup = zip(zipped_grads, grads)这段代码非常复杂,因为它正在实现AdaDelta更新机制。如果您想了解updates在更简单的设置中是如何工作的,请看一下Theano MLP教程中的基本随机梯度下降更新。
updates = [
(param, param - learning_rate * gparam)
for param, gparam in zip(classifier.params, gparams)
]https://stackoverflow.com/questions/31558162
复制相似问题