首页 Paddle框架 帖子详情
paddle,恢复训练时报错 已解决
收藏
快速回复
Paddle框架 问答模型训练 945 10
paddle,恢复训练时报错 已解决
收藏
快速回复
Paddle框架 问答模型训练 945 10

使用paddle2.2.0,前期训练中断后,

parser.add_argument('-resume', type=str, default='./output/train-20211210-09-50-43/Swin-Epoch-45')

写入地址,并运行main_single_gpu,model的恢复是能通过的,但是在optimizer恢复是报错'Momentum' object has no attribute 'set_dict'

代码和错误如下,各位大佬求教。

    if config.MODEL.RESUME:
        assert os.path.isfile(config.MODEL.RESUME+'.pdparams') is True
        assert os.path.isfile(config.MODEL.RESUME+'.pdopt') is True
        model_state = paddle.load(config.MODEL.RESUME+'.pdparams')
        model.set_dict(model_state)
        opt_state = paddle.load(config.MODEL.RESUME+'.pdopt')
        optimizer.set_dict(opt_state)
        logger.info(
            f"----- Resume Training: Load model and optmizer states from {config.MODEL.RESUME}")

UnseenMe
已解决
4# 回复于2021-12
不好意思。 又仔细看了下你的报错。这个问题,应该把 optimizer.set_dict(opt_state) 改成 optimizer.set_state_dict(opt_state)
展开
0
收藏
回复
全部评论(10)
时间顺序
UnseenMe
#2 回复于2021-12

恢复训练的话,应该是还需要一个

.pdstates

文件。这里有优化器相关状态。

0
回复
#3 回复于2021-12
恢复训练的话,应该是还需要一个 .pdstates 文件。这里有优化器相关状态。

.pdstates 没有看见这文件吧,大佬能给个截图例子吗?

这个地方不是要给地址嘛(config.MODEL.RESUM),.pdparams .pdopt是自己就能调用了,但是没看见有.pdstates 的文件

 

0
回复
UnseenMe
#4 回复于2021-12

不好意思。

又仔细看了下你的报错。这个问题,应该把

optimizer.set_dict(opt_state)

改成

optimizer.set_state_dict(opt_state)

0
回复
#5 回复于2021-12
不好意思。 又仔细看了下你的报错。这个问题,应该把 optimizer.set_dict(opt_state) 改成 optimizer.set_state_dict(opt_state)

感谢感谢,我去尝试了一下,确实不报错了,但是并没有从中断的地方开始训练,是重头开始的,这是读取了参数,从头开始训练吗?再次感谢解惑。

0
回复
#6 回复于2021-12
不好意思。 又仔细看了下你的报错。这个问题,应该把 optimizer.set_dict(opt_state) 改成 optimizer.set_state_dict(opt_state)

感谢大佬,虽然epoch是从0开始计算,但是参数是保存过的

0
回复
UnseenMe
#7 回复于2021-12
#6
感谢大佬,虽然epoch是从0开始计算,但是参数是保存过的

不客气。

如果是自己写的训练脚本的话,需要保存epoch。恢复的时候继续。

0
回复
但为の君故
#8 回复于2022-03

好兄弟能将完整的流程讲一下吗?我现在也遇到这个问题,先谢谢了

0
回复
fi_Past
#9 回复于2022-03

可以用warmup

0
回复
fi_Past
#10 回复于2022-03

这样对训练好的影响少

0
回复
l
liuzhicheng235
#11 回复于2022-03

我也遇到关于恢复训练的问题,在训练过程中能够保存、重新载入保存文件、评估都没有问题,但是训练结束后单独进行载入、评估,损失就很高,我感觉应该是模型还有东西没有保存始终没有看出问题,不知道哪里出问题了

    def save_model(self):
        save_folder='result'
        if not os.path.exists(save_folder):
            os.makedirs(save_folder)
        for model_name, model in self.models.items():
            save_path = os.path.join(save_folder, '{}.pdparams'.format(model_name))
            to_save = model.state_dict()
            paddle.save(to_save, save_path)
        save_path = os.path.join(save_folder, "{}.pdopt".format('sgd'))
        paddle.save(self.opt.state_dict(), save_path)
        
    def load_model(self):
        model_folder='result'
        model_names=['encoder','decoder']
        for model_name in model_names:
            model_path = os.path.join(model_folder, "{}.pdparams".format(model_name))
            model_state = paddle.load(model_path)
            self.models[model_name].set_state_dict(model_state)
        opt_path = os.path.join(model_folder, "{}.pdopt".format('sgd'))
        opt_state=paddle.load(opt_path)
        self.opt.set_state_dict(opt_state)
0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户