使用model.module保存模型参数

文章讨论了在PyTorch中,训练好的模型保存后,在不同环境中加载时性能下降的问题,发现使用`model.module`代替单独的`model`能解决模型参数一致性问题。加载并验证后,结果显示此方法有效。
摘要由CSDN通过智能技术生成

问题再现

之前训练的很好的model(mAP=80)保存之后,在另一个文件里加载,结果效果很差劲(mAP=3);

def save_checkpoint(state, is_best, filename='checkpoint.pth.tar'):
    if is_best:
        torch.save(state, os.path.split(filename)[0] + '/model_best.pth.tar')
    else:
        torch.save(state, os.path.split(filename)[0] + filename)

if mAP_ema > mAP:
    mAP = mAP_ema
    state_dict = ema_m.module.state_dict()
else:
    state_dict = model.state_dict()

save_checkpoint({
            'epoch': epoch + 1,
            'state_dict': state_dict,
            'best_mAP': best_mAP,
            'optimizer' : optimizer.state_dict(),
        }, is_best=is_best, filename=os.path.join(args.output, 'checkpoint.pth.tar'))

用 model.module 替代单独的 model

if mAP_ema > mAP:
    mAP = mAP_ema
    state_dict = ema_m.module.state_dict()
else:
    state_dict = model.module.state_dict()

保存模型,重新在另外一个模型加载,跑一遍validate(),最后结果也很棒;
所以这个方法是有效的;

参考

[1] Pytorch加载保存好的模型发现与实际保存模型的参数不一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值