Skip to content

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

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 6月 27, 2019 by saxon_zh@saxon_zhGuest

增量训练,前一次训练能力丢失的问题。

Created by: 707503331

  • 版本、环境信息:    1)PaddlePaddle版本:1.4.1    3)GPU:百度1小时的GPU算力卡    4)系统环境:Python3.5

  • 模型信息 1)模型名称 Mobilenet V1 2)自定义数据集 3)使用算法名称 4)模型链接

  • 复现信息:如为报错,请给出复现环境、复现步骤

  • 问题描述:先训练数据集A,再增量训练数据集B,2个数据集没有交接; A训练完毕,做一次预测,打印出来的是是本次定义的标签; B训练完毕,用与A同样的预测数据,做一次训练,打印出来的都是B数据集的标签定义; 结论:A数据集训练的“标签”都丢失了,貌似被覆盖了。

以下是我的训练程序(摘自夜雨飘零的博客,改造了部分代码):

-- coding: utf-8 --

import os import shutil import mobilenet_v1 import paddle as paddle import reader import paddle.fluid as fluid

crop_size = 224 resize_size = 250 #checkpoint = 'MobileNet/119' checkpoint = None #训练总数 trainNumber = 100 #最后一次训练id lastTrainNo = trainNumber - 1 classDim = 4000

f = open("log.txt", "w")

定义输入层

image = fluid.layers.data(name='image', shape=[3, crop_size, crop_size], dtype='float32') label = fluid.layers.data(name='label', shape=[1], dtype='int64')

获取分类器,因为这次只爬取了6个类别的图片,所以分类器的类别大小为6

model = mobilenet_v1.net(image, classDim)

获取损失函数和准确率函数

cost = fluid.layers.cross_entropy(input=model, label=label) avg_cost = fluid.layers.mean(cost) acc = fluid.layers.accuracy(input=model, label=label)

获取训练和测试程序

test_program = fluid.default_main_program().clone(for_test=True)

定义优化方法

optimizer = fluid.optimizer.AdamOptimizer(learning_rate=1e-3, regularization=fluid.regularizer.L2DecayRegularizer(1e-4)) opts = optimizer.minimize(avg_cost)

获取自定义数据

train_reader = paddle.batch(reader=reader.train_reader('../data/data8509/train_list.txt', crop_size, resize_size), batch_size=32) test_reader = paddle.batch(reader=reader.test_reader('../data/data8509/test_list.txt', crop_size), batch_size=32)

定义一个使用GPU的执行器

place = fluid.CUDAPlace(0) #place = fluid.CPUPlace() exe = fluid.Executor(place)

进行参数初始化

exe.run(fluid.default_startup_program())

if checkpoint is not None: print('----加载历史训练数据---%s'%(checkpoint)) fluid.io.load_persistables(exe, checkpoint, main_program=fluid.default_startup_program())

定义输入数据维度

feeder = fluid.DataFeeder(place=place, feed_list=[image, label])

训练10次

for pass_id in range(trainNumber): # 进行训练 for batch_id, data in enumerate(train_reader()): train_cost, train_acc = exe.run(program=fluid.default_main_program(), feed=feeder.feed(data), fetch_list=[avg_cost, acc])

    # 每100个batch打印一次信息
    if batch_id % 100 == 0:
        print('Pass:%d, Batch:%d, Cost:%0.5f, Accuracy:%0.5f' %
              (pass_id, batch_id, train_cost[0], train_acc[0]),file=f)

# 进行测试
test_accs = []
test_costs = []
for batch_id, data in enumerate(test_reader()):
    test_cost, test_acc = exe.run(program=test_program,
                                  feed=feeder.feed(data),
                                  fetch_list=[avg_cost, acc])
    test_accs.append(test_acc[0])
    test_costs.append(test_cost[0])
# 求测试结果的平均值
test_cost = (sum(test_costs) / len(test_costs))
test_acc = (sum(test_accs) / len(test_accs))
print('Test:%d, Cost:%0.5f, Accuracy:%0.5f' % (pass_id, test_cost, test_acc),file=f)
f.flush()
#保存模型后续增量训练
model_path = os.path.join('MobileNet',str(pass_id))
if not os.path.isdir(model_path):
    os.makedirs(model_path)
fluid.io.save_persistables(exe, model_path, main_program=fluid.default_main_program())

if pass_id == lastTrainNo:
    # 保存预测模型
    save_path = 'infer_model'
    # 删除旧的模型文件
    shutil.rmtree(save_path, ignore_errors=True)
    # 创建保持模型文件目录
    os.makedirs(save_path)
    # 保存预测模型
    fluid.io.save_inference_model(save_path, feeded_var_names=[image.name], target_vars=[model], executor=exe)

f.close()

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#18359
渝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