Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

python config parser重构之optimizer #1210

Closed
jacquesqiao opened this issue Jan 22, 2017 · 2 comments
Closed

python config parser重构之optimizer #1210

jacquesqiao opened this issue Jan 22, 2017 · 2 comments
Assignees

Comments

@jacquesqiao
Copy link
Member

jacquesqiao commented Jan 22, 2017

为了提供更加灵活的python使用方法,在之前的工作 #1108 中,开始进行python api v2的开发工作,抽象出来了 layers,optimizer,data等组件。

之前的重构是对原有的config_parser.py 做了一层封装,对于这种封装的改造方式,王益老师的意见是:

之前我们讨论说先用目前的“不需要定义多个.py文件“的API把所有demo都重写一遍,然后再来看应该如何完善API。
但是我刚才又想了一下,是不是API里如果有一些明显的问题,可以先修正问题,然后再来重写mnist之后的下一个demo。这样效率更高?
在写mnist的时候,我们不要 import * from 已有的Python packages,而是 copy-n-paste 已有的package 到 paddle.v2。这样我们就可以在”把mnist demo写得顾名思义“这个过程里,修改copy 过来的实现。当我们针对每个demo重复这个过程之后,我们是不是就得到了一个完备的v2 API了。

按着这种思路,在上述的几个组件中感觉optimizer这个组件相对比较独立,所以决定第一步先把optimizer和相关配置独立出来。

主要方案:

  • 1,对外接口方面,在optimizer的基础上继续完善。
  • 2,配置生成的方案,主要需要重构 settings 以及涉及到的 config_parser中的部分内容,主要需要做的是将这部分代码及相关代码,从config_parser中单独抽离出来,放到v2下,并且改变之前通过回调的生成配置的方式,直接生成对应的proto。

这样做的好处:

  • 1,optimizer相对独立,且功能没有layer配置那么复杂,比较容易着手。
  • 2,optimizer的部分从config_parser中独立出来之后,会简化后面重新定义layer和network部分的工作。

使用方式:

    optimizer = paddle.v2.Optimizer(
        learning_method=paddle.optimizer.AdamOptimizer(),
        learning_rate=1e-4,
        model_average=paddle.optimizer.ModelAverage(average_window=0.5),
        regularization=paddle.optimizer.L2Regularization(rate=0.5))
@wangkuiyi
Copy link
Collaborator

wangkuiyi commented Jan 22, 2017

下面这段代码里看上去有一些不一致性

    optimizer = paddle.v2.Optimizer(
        learning_method=paddle.optimizer.AdamOptimizer(),
        learning_rate=1e-4,
        model_average=paddle.optimizer.ModelAverage(average_window=0.5),
        regularization=paddle.optimizer.L2Regularization(rate=0.5))
  1. paddle.v2.Optimizerpaddle.optimizer.AdamOptimizer 不在同一个package里?
  2. paddle.v2.Optimizer 从命名上看是一个 class,它的构造函数的参数里为什么需要另一个 optimizer (AdamOptimizer)呢?它们俩倒是谁是我们要的optimizer?
  3. ModelAverage 是想叫做 ModelAverager 吗?少了个 er,貌似从英语语法上就不通了?
  4. 一个optimizer为什么需要 model averager 呢?是因为这是一个分布式optimizer吗?

我了解这些不一致性,有很多和 @jacquesqiao 的设计没关系,是因为历史原因。但是在我们的v2里看起来必须fix。

@jacquesqiao
Copy link
Member Author

1,这个地方已修改。
2,在现在的版本中AdamOptimizer是对已有的Optimizer的一些属性扩展,不过按照设计文档,这个Optimizer是不是应该不存在了,而是叫做Updater,paddle.optimizer.AdamOptimize是updater的learning_method,这样就不存在概念的混淆了。
3,ModelAverage这个细节我也不太清楚,我请教下 @reyoung

zhhsplendid pushed a commit to zhhsplendid/Paddle that referenced this issue Sep 25, 2019
* refine the fill_constant doc test=develop

* fix according the standard test=develop

* fix fill_constant doc test=develop

* fix from standard test=develop
lizexu123 pushed a commit to lizexu123/Paddle that referenced this issue Feb 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants