首页 Paddle框架 帖子详情
paddle如何保存模型状态字典
收藏
快速回复
Paddle框架 问答深度学习 1413 19
paddle如何保存模型状态字典
收藏
快速回复
Paddle框架 问答深度学习 1413 19

paddle应该如何保存状态字典,使用paddle.save(ckpt,path)会报错

 

def ckpt_save(val_dict, model, optimizer, save_path):
    ckpt = {
        'acc': val_dict['acc_now'],
        'loss': val_dict['loss_now'],
        'epoch': val_dict['epoch_now'],
        'model_state_dict': model.state_dict(),
        'optimizer_state_dict': optimizer.state_dict(),
    }
    paddle.save(ckpt, save_path)

 

File "E:\0_Python\02_git\segmentation_paddle\my_utils\net_prepare.py", line 455, in model_save
ckpt_save(val_dict, model, optimizer, Model_ckpt_path)
File "E:\0_Python\02_git\segmentation_paddle\my_utils\net_prepare.py", line 469, in ckpt_save
paddle.save(ckpt, save_path)
File "C:\Users\12458\AppData\Local\Programs\Python\Python36\lib\site-packages\paddle\framework\io.py", line 289, in save
pickle.dump(saved_obj, f, protocol=pickle_protocol)
TypeError: can't pickle ParamBase objects

0
收藏
回复
全部评论(19)
时间顺序
trainer
#2 回复于2021-04

有没有大佬帮忙解答下

0
回复
七年期限
#3 回复于2021-04

https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/framework/io/save_cn.html#save

0
回复
七年期限
#4 回复于2021-04

我觉得你需要看一下这个api

0
回复
IsaacLeo
#5 回复于2021-04

保存为pdmodel文件

或者pdopt

0
回复
trainer
#6 回复于2021-04
我觉得你需要看一下这个api

感谢,之前看过很多次了,这个api,以及paddle.jit.save  api,似乎都只支持对于网络模型参数、优化器参数的保存,不支持checkpoint这种状态字典的保存,所以才在此提问

不知道大佬是否了解paddle中关于checkpoint这种状态字典的保存方法

0
回复
trainer
#7 回复于2021-04
保存为pdmodel文件 或者pdopt

感谢大佬,都尝试过,都无法保存checkpoint

0
回复
AIStudio810258
#8 回复于2021-04
trainer #6
感谢,之前看过很多次了,这个api,以及paddle.jit.save  api,似乎都只支持对于网络模型参数、优化器参数的保存,不支持checkpoint这种状态字典的保存,所以才在此提问 不知道大佬是否了解paddle中关于checkpoint这种状态字典的保存方法
展开

确定paddle 有存储“状态字典”的api,有文档链接么?

0
回复
AIStudio810258
#9 回复于2021-04

paddle.save() 存储的就是 state dict 格式的模型

0
回复
AIStudio810258
#10 回复于2021-04

你指的是这个么?

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

https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/framework/io/save_cn.html#save

0
回复
AIStudio810258
#12 回复于2021-04

这个才是paddle.save() api的接口

0
回复
AIStudio810258
#13 回复于2021-04

那个字典类型的参数格式是哪来的啊

0
回复
trainer
#14 回复于2021-04
确定paddle 有存储“状态字典”的api,有文档链接么?

感谢,

3楼的大佬发的就是你发的这个链接;

正是因为不知道有没有类似的api,所以才在这里提问;

保存的内容除了模型参数和优化器参数外,其余均是自定义,我在pytorch中都是这样用的

0
回复
AIStudio810258
#15 回复于2021-04
trainer #14
感谢, 3楼的大佬发的就是你发的这个链接; 正是因为不知道有没有类似的api,所以才在这里提问; 保存的内容除了模型参数和优化器参数外,其余均是自定义,我在pytorch中都是这样用的

paddle里应该没强制要求那些训练信息,自己定义下吧

0
回复
trainer
#16 回复于2021-04

感谢各位大佬,该问题已经解决。

 

paddle保存模型参数是parambase格式,paddle.save对要保存的字典对象的值会进行解码,对于parambase格式会进行转换

 

但我的保存方式,字典的值是字典(相当于2级字典),该2级字典的值是模型参数(parambase格式),但是paddle.save只对字典的值进行解码,对于该2级字典的值不会进行解译,因此需要手动修改。

 

在保存时,对模型参数进行手动解码就可以了。我的修改代码如下:

    def model_rebuild(model_state_dict):
        new_dict = {}
        for k, v in model_state_dict.items():
            new_dict[k] = v.numpy()
        return new_dict

    ckpt = {
        'acc': val_dict['acc_now'],
        'loss': val_dict['loss_now'],
        'epoch': val_dict['epoch_now'],
        'model_state_dict': model_rebuild(model.state_dict()),
        'optimizer_state_dict': optimizer.state_dict(),
    }
1
回复
七年期限
#17 回复于2021-04
trainer #6
感谢,之前看过很多次了,这个api,以及paddle.jit.save  api,似乎都只支持对于网络模型参数、优化器参数的保存,不支持checkpoint这种状态字典的保存,所以才在此提问 不知道大佬是否了解paddle中关于checkpoint这种状态字典的保存方法
展开

字典这种能保存吗?

0
回复
七年期限
#18 回复于2021-04
这个才是paddle.save() api的接口

他说的跟这个不一样坤哥

0
回复
七年期限
#19 回复于2021-04
trainer #16
感谢各位大佬,该问题已经解决。   paddle保存模型参数是parambase格式,paddle.save对要保存的字典对象的值会进行解码,对于parambase格式会进行转换   但我的保存方式,字典的值是字典(相当于2级字典),该2级字典的值是模型参数(parambase格式),但是paddle.save只对字典的值进行解码,对于该2级字典的值不会进行解译,因此需要手动修改。   在保存时,对模型参数进行手动解码就可以了。我的修改代码如下: [代码]
展开

明白了

0
回复
七年期限
#20 回复于2021-04

model_rebuild(model.state_dict())  还是这里的问题

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