【Libtorch部署】C++中与Python推理结果不一致

C++中与Python推理结果不一致

问题分析:

  该问题主要是Pytorch模型存储和读取的方式导致的,一般分为两种保存与读取方式:

  1. 直接存储与读取整个模型的框架与参数
    存储:
torch.save(model, "model.pkl" )

  读取:

model = torch.load("model.pkl" )
  1. 仅存储模型参数
    存储:
torch.save(model.state_dict(), "model.pkl" )

  读取:

model = net()       # 自己定义的模型
model.load_state_dict(torch.load("model.pkl"))

然而,我是用的是方便断点恢复的存储与读取方式,读取模型的时候还是按照第2种方式。
这种情况在Python里没啥问题,推理结果很正常。但是,在C++里就不行了,因为pkl转pt的时候,关键词"net"对应的权重没有转换好。

  1. 断点恢复,可存储模型参数、学习率、优化器……(按照下面的进行修改)
    存储:
    自定义要保存的参数信息
checkpoint = {
"net": model.state_dict(),
"optimizer": optimizer.state_dict(),
"epoch": epoch,
"scheduler": scheduler.state_dict()
}
torch.save(model.state_dict(), "model.pkl" )

  读取:

model = net()       # 自己定义的模型
checkpoint = torch.load( "model.pkl")
model .load_state_dict(checkpoint["net"])            # 加载模型参数
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值