Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • Issue
  • #17137

P
Paddle
  • 项目概览

PaddlePaddle / Paddle
大约 2 年 前同步成功

通知 2325
Star 20933
Fork 5424
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 4月 28, 2019 by saxon_zh@saxon_zhGuest

关于使用paddle进行图像分类模型finetune训练的坑

Created by: lgone2000

在使用图像分类训练时,有一个参数是指定预训练模型。 https://github.com/PaddlePaddle/models/blob/53ea0f3186504a9c619651ce862fa576a9144424/PaddleCV/image_classification/train.py#L291

    if pretrained_model:

        def if_exist(var):
            return os.path.exists(os.path.join(pretrained_model, var.name))

        fluid.io.load_vars(
            exe, pretrained_model, main_program=train_prog, predicate=if_exist)

这段代码如果载入了之前训练的模型,有可能也同时载入了一个

@LR_DECAY_COUNTER@

的变量 (参考文档) , 会导致learningratedecay策略使用预训练模型里面保存的计数器,而不是从0开始,这个和通常训练预期不符合。经过咨询paddle同学,可以改成如下形式,通过限制载入条件,避免加载这个变量。
 if pretrained_model:

        def check_var(var):
            exists = os.path.exists(os.path.join(pretrained_model, var.name))
            if var.persistable:
                if var.name == '@LR_DECAY_COUNTER@':
                    return False
                else:
                    if not exists:
                        print('missing variable', var.name)
                        return False
                    return True
            return exists

        fluid.io.load_vars(
            exe, pretrained_model, main_program=train_prog, predicate=check_var)
        

另外需要注意的是,分类模型如果需要finetune,需要把最后分类层改一个名字,避免加载错误的参数。经过验证上述改动可用,其他预训练模型使用程序也可能遇到类似问题,供大家参考。

建议paddle同学把这个内容加到文档中明确标明,也同时修改一下models/paddlecv相关代码。

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#17137
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7