首页 Paddle框架 帖子详情
读取优化器信息报错
收藏
快速回复
Paddle框架 问答深度学习模型训练炼丹技巧 2645 18
读取优化器信息报错
收藏
快速回复
Paddle框架 问答深度学习模型训练炼丹技巧 2645 18

模型存储:

        paddle.save(g_a.state_dict(), model_path+'gen_b2a.pdparams')
        paddle.save(g_a_optimizer.state_dict(), model_path+'gen_b2a.pdopt')

模型读取:

        ga_para_dict = paddle.load(model_path+'gen_b2a.pdparams')
        ga_opt_dict = paddle.load(model_path+'gen_b2a.pdopt')
        g_a.set_state_dict(ga_para_dict)
        g_a_optimizer.set_state_dict(ga_opt_dict)

训练代码报错:

Start time : 2020-12-11 19:39:15 start step: 16

---------------------------------------------------------------------------AssertionError Traceback (most recent call last) in
165
166 # 继续训练
--> 167 train(PLACE, print_interval=1, max_step=5, load_model=True)
168 # train(PLACE, print_interval=500, max_step=8000, load_model=True)
in train(place, epoch_num, adv_weight, cycle_weight, identity_weight, load_model, model_path, model_path_bkp, print_interval, max_step, model_bkp_interval)
95 ga_loss = ga_gan_loss * adv_weight + ga_cyc_loss * cycle_weight + ga_ide_loss * identity_weight
96 ga_loss.backward()
---> 97 g_a_optimizer.step()
98 g_a_optimizer.clear_grad()
99
in step(self)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py in __impl__(func, *args, **kwargs)
23 def __impl__(func, *args, **kwargs):
24 wrapped_func = decorator_func(func)
---> 25 return wrapped_func(*args, **kwargs)
26
27 return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/framework.py in __impl__(*args, **kwargs)
222 assert in_dygraph_mode(
223 ), "We only support '%s()' in dynamic graph mode, please call 'paddle.disable_static()' to enter dynamic graph mode." % func.__name__
--> 224 return func(*args, **kwargs)
225
226 return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/optimizer/adam.py in step(self)
290
291 optimize_ops = self._apply_optimize(
--> 292 loss=None, startup_program=None, params_grads=params_grads)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/optimizer/optimizer.py in _apply_optimize(self, loss, startup_program, params_grads)
768 params_grads = append_regularization_ops(params_grads,
769 self.regularization)
--> 770 optimize_ops = self._create_optimization_pass(params_grads)
771 else:
772 program = loss.block.program
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/optimizer/optimizer.py in _create_optimization_pass(self, parameters_and_grads)
587 self._create_accumulators(
588 target_block,
--> 589 [p[0] for p in parameters_and_grads if p[0].trainable])
590 self._create_global_learning_rate()
591
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/optimizer/adam.py in _create_accumulators(self, block, parameters)
164 # Create accumulator tensors for first and second moments
165 for p in parameters:
--> 166 self._add_accumulator(self._moment1_acc_str, p)
167 self._add_accumulator(self._moment2_acc_str, p)
168 self._add_accumulator(
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/optimizer/optimizer.py in _add_accumulator(self, name, param, dtype, fill_value, shape, type, device)
505 if len(self._accumulators_holder) > 0:
506 assert var_name in self._accumulators_holder, \
--> 507 "Optimizer set error, {} should in state dict".format( var_name )
508 var.set_value(self._accumulators_holder[var_name])
509
AssertionError: Optimizer set error, conv2d_468.w_0_moment1_0 should in state dict

1
收藏
回复
全部评论(18)
时间顺序
AIStudio810258
#2 回复于2020-12

如果将设置优化器的代码:

g_a_optimizer.set_state_dict(ga_opt_dict)

去掉,就不抱错了

0
回复
AIStudio810258
#3 回复于2020-12

是我用的不对么?

0
回复
AIStudio810258
#4 回复于2020-12
Start time : 2020-12-11 19:39:15 start step: 16
---------------------------------------------------------------------------AssertionError                            Traceback (most recent call last) in 
    165 
    166 # 继续训练
--> 167 train(PLACE, print_interval=1, max_step=5, load_model=True)
    168 # train(PLACE, print_interval=500, max_step=8000, load_model=True)
 in train(place, epoch_num, adv_weight, cycle_weight, identity_weight, load_model, model_path, model_path_bkp, print_interval, max_step, model_bkp_interval)
     95             ga_loss = ga_gan_loss * adv_weight + ga_cyc_loss * cycle_weight + ga_ide_loss * identity_weight
     96             ga_loss.backward()
---> 97             g_a_optimizer.step()
     98             g_a_optimizer.clear_grad()
     99 
 in step(self)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py in __impl__(func, *args, **kwargs)
     23     def __impl__(func, *args, **kwargs):
     24         wrapped_func = decorator_func(func)
---> 25         return wrapped_func(*args, **kwargs)
     26 
     27     return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/framework.py in __impl__(*args, **kwargs)
    222         assert in_dygraph_mode(
    223         ), "We only support '%s()' in dynamic graph mode, please call 'paddle.disable_static()' to enter dynamic graph mode." % func.__name__
--> 224         return func(*args, **kwargs)
    225 
    226     return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/optimizer/adam.py in step(self)
    290 
    291         optimize_ops = self._apply_optimize(
--> 292             loss=None, startup_program=None, params_grads=params_grads)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/optimizer/optimizer.py in _apply_optimize(self, loss, startup_program, params_grads)
    768                 params_grads = append_regularization_ops(params_grads,
    769                                                          self.regularization)
--> 770                 optimize_ops = self._create_optimization_pass(params_grads)
    771         else:
    772             program = loss.block.program
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/optimizer/optimizer.py in _create_optimization_pass(self, parameters_and_grads)
    587         self._create_accumulators(
    588             target_block,
--> 589             [p[0] for p in parameters_and_grads if p[0].trainable])
    590         self._create_global_learning_rate()
    591 
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/optimizer/adam.py in _create_accumulators(self, block, parameters)
    164         # Create accumulator tensors for first and second moments
    165         for p in parameters:
--> 166             self._add_accumulator(self._moment1_acc_str, p)
    167             self._add_accumulator(self._moment2_acc_str, p)
    168             self._add_accumulator(
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/optimizer/optimizer.py in _add_accumulator(self, name, param, dtype, fill_value, shape, type, device)
    505             if len(self._accumulators_holder) > 0:
    506                 assert var_name in self._accumulators_holder, \
--> 507                         "Optimizer set error, {} should in state dict".format( var_name )
    508                 var.set_value(self._accumulators_holder[var_name])
    509 
AssertionError: Optimizer set error, conv2d_468.w_0_moment1_0 should in state dict
0
回复
AIStudio810258
#5 回复于2020-12
[代码]

这是带缩进格式的报错信息

0
回复
A
AIxiaoabaitu
#6 回复于2021-02

遇到一样的问题,不知道你解决了没有,如果解决了,可以分享一下吗

0
回复
AIStudio810258
#7 回复于2021-02
遇到一样的问题,不知道你解决了没有,如果解决了,可以分享一下吗

后来我就没读这个,自己另存了一个,就好了

0
回复
AIStudio810258
#8 回复于2021-02
遇到一样的问题,不知道你解决了没有,如果解决了,可以分享一下吗

一般都是文件名、路径之类的原因

0
回复
AIStudio810258
#9 回复于2021-02
遇到一样的问题,不知道你解决了没有,如果解决了,可以分享一下吗

遇到存取问题可以查文档

0
回复
AIStudio810258
#10 回复于2021-02
遇到一样的问题,不知道你解决了没有,如果解决了,可以分享一下吗

https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/08_model_save_load_cn.html

0
回复
AIStudio810258
#11 回复于2021-02

我遇上的问题可能是模型结构做过改动导致的

0
回复
魏鑫2020
#12 回复于2021-03

保存的模型修改模型的结构了吗?

0
回复
魏鑫2020
#13 回复于2021-03

怀疑是因为修改了模型结构,是用adam吗?adam的当前状态是和上一步训练相关的,要记录当前的moment,ga_opt_dict里面没有新的conv2d的状态,所以报错。一般,fine-tune只保存g_a.state_dict()就可以了;当做checkpoint的话可以保g_a_optimizer.state_dict()。

1
回复
AIStudio810258
#14 回复于2021-03
怀疑是因为修改了模型结构,是用adam吗?adam的当前状态是和上一步训练相关的,要记录当前的moment,ga_opt_dict里面没有新的conv2d的状态,所以报错。一般,fine-tune只保存g_a.state_dict()就可以了;当做checkpoint的话可以保g_a_optimizer.state_dict()。
展开

嗯,就是为了继续训练。

0
回复
T
Tears
#15 回复于2021-07

我也遇到这个问题了,https://aistudio.baidu.com/paddle/forum/topic/show/989540

0
回复
萧忆情
#16 回复于2022-07

重启环境,这个问题就能解决,怀疑是缓存的问题

0
回复
李长安
#17 回复于2022-07

蜜汁报错

0
回复
Seven Sea
#18 回复于2023-03
如果将设置优化器的代码: [代码] 去掉,就不抱错了

你这样去掉就是不载入之前的优化器参数了,而你的保存就是优化器在载入参数的时候报错。所以去掉了肯定不会保存。但这没有从根本上解决问题。

保存优化器参数的主要作用是,在恢复训练时,能够从之前停止训练的地方继续训练,而不是从头开始训练。如果不保存优化器参数,需要重新初始化优化器,这可能会导致训练效果变差。

在后续训练中如果只载入模型之前保存的参数,而不载入优化器的参数,模型照样可以继续训练。但是,由于优化器参数的缺失,模型的训练可能会出现一些不稳定的情况,比如出现震荡或者收敛速度变慢。因此,如果有保存优化器参数的需要,最好还是一起载入。

所以你把那一行去掉只是没有载入优化器参数,但是正常来将就是要载入优化器参数来训练的。

0
回复
Seven Sea
#19 回复于2023-03

这个是paddle一直没有修复的bug

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户