SOPHON SDK对于paddle模型转换的常见问题

静态图保存*.pdmodel和*.pdpot 与*.pdmodel和*.pdiparams的区别?

其主要差别在于保存结果的应用场景:

*.pdmodel,*.pdparams,*.pdopt 三种由save接口保存(2.0的paddle.static.save或者1.8的fluid.io.save)。

*.pdmodel 和 *.pdiparams 由 save_inference_model接口保存(2.0的paddle.static.save_inference_model或者1.8的fluid.io.save_inference_model)

save接口:

该接口用于保存训练过程中的模型和参数,一般包括*.pdmodel,.pdparams,.pdopt三个文件。其中*.pdmodel是训练使用的完整模型program描述,区别于推理模型,训练模型program包含完整的网络,包括前向网络,反向网络和优化器,而推理模型program仅包含前向网络,.pdparams是训练网络的参数dict,key为变量名,value为Tensor array数值,.pdopt是训练优化器的参数,结构与*.pdparams一致

save_inference_model接口:

该接口用于保存推理模型和参数,2.0的paddle.static.save_inference_model保存结果为*.pdmodel和*.pdiparams两个文件,其中*.pdmodel为推理使用的模型program描述,.pdiparams为推理用的参数,这里存储格式与.pdparams不同(注意两者后缀差个i),*.pdiparams为二进制Tensor存储格式,不含变量名。1.8的fluid.io.save_inference_model默认保存结果为__model__文件,和以参数名为文件名的多个分散参数文件,格式与2.0一致。

详情请参考: 模型保存与载入-使用文档-PaddlePaddle深度学习平台

如何生成*.pdmodel和*.pdiparams?

请添加图片描述

  • 动态图存储模型结构和参数 根据训练模式不同,分为两种情况:
    动转静训练 + 模型&参数存储:
    动转静训练相比直接使用动态图训练具有更好的执行性能,训练完成后,直接将目标Layer传入 paddle.jit.save 存储即可。

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

  • 静态图推理模型&参数保存
    保存/载入静态图推理模型,可以通过 paddle.static.save/load_inference_model实现。 静态图导出推理模型需要指定导出路径、输入、输出变量以及执行器。save_inference_model 会裁剪Program的冗余部分,并导出两个文件: path_prefix.pdmodel 、path_prefix.pdiparams。
    注意事项请参考: 模型保存与载入-使用文档-PaddlePaddle深度学习平台

  • checkpoint(persistable 模型)转换为inference模型保存
    在任务的训练阶段,通常我们会保存一些 checkpoint(persistable 模型),这些只是模型权重文件,不能直接被预测引擎直接加载预测,所以我们通常会在训练完之后,找到合适的 checkpoint 并将其转换为 inference 模型。需要构建训练引擎,之后保存 inference 模型即可。 在paddleclas模型库的 tools/export_model.py 中提供了完整的示例,只需执行下述命令即可完成转换:

    python tools/export_model.py \
        -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值