首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >theano函数中的更新参数

theano函数中的更新参数
EN

Stack Overflow用户
提问于 2015-07-22 08:42:39
回答 1查看 2.2K关注 0票数 4

“更新”参数在这种情况下会做什么?

代码语言:javascript
运行
复制
f_grad_shared = theano.function([x, mask, y], cost, updates=zgup + rg2up,
                                    name='adadelta_f_grad_shared')

我在theano函数中看到的关于“更新”参数的所有文档都谈到了表单的对(共享变量,用于更新共享变量的表达式)。但是,这里只有一个表达式,所以我如何知道更新了哪个共享变量?

我想共享变量在某种程度上是隐式的,但是zguprg2up都依赖于不同的共享变量:

代码语言:javascript
运行
复制
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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-22 09:01:32

正确的想法是,updates应该是键值对的列表(或字典),其中键是共享变量,值是描述如何更新相应共享变量的符号表达式。

这两行创建成对:

代码语言:javascript
运行
复制
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_gradsrunning_grads2都只是共享变量的列表。在这里,这些共享变量使用Python函数链接到更新,该函数会发出一个对的列表。实际上,这些行的第一行可以替换为

代码语言:javascript
运行
复制
zgup = zip(zipped_grads, grads)

这段代码非常复杂,因为它正在实现AdaDelta更新机制。如果您想了解updates在更简单的设置中是如何工作的,请看一下Theano MLP教程中的基本随机梯度下降更新。

代码语言:javascript
运行
复制
updates = [
        (param, param - learning_rate * gparam)
        for param, gparam in zip(classifier.params, gparams)
    ]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31558162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档