Bootstrap

paddlepaddle(六)模型保存与载入

目录

1.API分类

1.1基础API

1.2高级API

2.训练调优场景的模型&参数保存载入

2.1动态图参数保存载入

 2.2静态图参数保存载入

 3.训练部署场景的模型参数保存载入

3.1 动态图模型&参数保存载入(训练推理)

3.2 静态图模型&参数保存载入(推理部署)


1.API分类

API使用场景动态图静态图
paddle.save/load训练调优
paddle.jit.save/load推理部署、动转静的训练
paddle.static.save和load_inference_model推理部署

动态图的训练模型转化为静态图推理时,动态图开发调试结束转为静态图训练时,使用paddle.jit.save。

1.1基础API

  • 对于训练调优场景,使用paddle.save/load保存和载入模型。
  • 对于推理部署场景,使用paddle.jit.save/load(动态图)和paddle.static.save/load_inference_model(静态图)保存载入模型。

1.2高级API

  • paddle.Model.fit (训练接口,同时带有参数保存的功能)

  • paddle.Model.save

  • paddle.Model.load

2.训练调优场景的模型&参数保存载入

2.1动态图参数保存载入

2.1.1参数保存

参数保存时,先获取目标对象(Layer或者Optimzier)的state_dict,然后将state_dict保存至磁盘

# save
paddle.save(layer.state_dict(), "linear_net.pdparams")
paddle.save(adam.state_dict(), "adam.pdopt")
  • obj (Object) – 要保存的对象实例。

  • path (str|BytesIO) – 保存对象实例的路径/内存对象。如果存储到当前路径,输入的path字符串将会作为保存的文件名。

2.1.2参数载入

参数载入时,先从磁盘载入保存的state_dict,然后通过set_state_dict方法配置到目标对象中

# load
layer_state_dict = paddle.load("linear_net.pdparams")
opt_state_dict = paddle.load("adam.pdopt")

layer.set_state_dict(layer_state_dict)
adam.set_state_dict(opt_state_dict)

 2.2静态图参数保存载入

2.2.1参数保存

  • 仅保存参数时
paddle.save(prog.state_dict(), "temp/model.pdparams")
  • 保存模型和参数
paddle.save(prog, "temp/model.pdmodel")

2.2.2参数加载

  • 仅保存参数的加载
state_dict = paddle.load("temp/model.pdparams")
prog.set_state_dict(state_dict)
  •  保存了参数和模型的加载
prog = paddle.load("temp/model.pdmodel")

 3.训练部署场景的模型参数保存载入

3.1 动态图模型&参数保存载入(训练推理)

若要同时保存/载入动态图模型结构和参数,可以使用 paddle.jit.save/load 实现。

3.1.1动转静训练 + 模型&参数保存

动转静训练相比直接使用动态图训练具有更好的执行性能,训练完成后,直接将目标Layer传入 paddle.jit.save 保存即可。

3.1.2 动态图训练 + 模型&参数保存

动态图模式相比动转静模式更加便于调试,如果你仍需要使用动态图直接训练,也可以在动态图训练完成后调用 paddle.jit.save 直接保存模型和参数。

3.1.3 动态图模型&参数载入

载入模型参数,使用 paddle.jit.load 载入即可,载入后得到的是一个Layer的派生类对象 TranslatedLayer , TranslatedLayer 具有Layer具有的通用特征,支持切换 train 或者 eval 模式,可以进行模型调优或者预测。

3.2 静态图模型&参数保存载入(推理部署)

保存/载入静态图推理模型,可以通过 paddle.static.save/load_inference_model 实现。

3.2.1静态图推理模型&参数保存

静态图导出推理模型需要指定导出路径、输入、输出变量以及执行器。 save_inference_model 会裁剪Program的冗余部分,并导出两个文件: path_prefix.pdmodel 、 path_prefix.pdiparams 。

# Save the inference model
path_prefix = "./infer_model"
paddle.static.save_inference_model(path_prefix, [image], [hidden_b], exe)

3.2.2静态图推理模型&参数载入

载入静态图推理模型时,输入给 load_inference_model 的路径必须与 save_inference_model 的一致。

[inference_program, feed_target_names, fetch_targets] = (
    paddle.static.load_inference_model(path_prefix, exe))
tensor_img = np.array(np.random.random((64, 784)), dtype=np.float32)
results = exe.run(inference_program,
                feed={feed_target_names[0]: tensor_img},
                fetch_list=fetch_targets)

;