pytorch中模型的保存与加载

参考:https://blog.csdn.net/tfygg/article/details/70227388

特别开心的训练出来10个模型,准备加载画confusion_matrix…然后就遇到了下面的问题:
AttributeError: ‘VGG’ object has no attribute 'copy’
原来是由于下面这个原因:模型的保存与加载的方式不对应!

1.torch.save()实现对网络结构和模型参数的保存。有两种保存方式:一是保存整个神经网络的的结构信息和模型参数信息,save的对象是网络net;二是只保存神经网络的训练模型参数,save的对象是net.state_dict()。

    torch.save(net1, '7-net.pth')                     # 保存整个神经网络的结构和模型参数  
    torch.save(net1.state_dict(), '7-net_params.pth') # 只保存神经网络的模型参数  

我的代码中是这样写的:
'net': net.state_dict() if use_cuda else net
如果用gpu的话,就只保存网络的训练模型参数
如果用cpu的话,就保存整个网络的结构信息和模型参数信息

2.对应上面两种保存方式,重载方式也有两种。对应第一种完整网络结构信息,重载的时候通过checkpoint=torch.load(‘.pth’),net=checkpoint[‘net’]直接初始化新的神经网络对象即可。对应第二种只保存模型参数信息,需要首先导入对应的网络,通过net.load_state_dict(torch.load(’.pth’))完成模型参数的重载。

保存和加载整个模型

torch.save(model_object, ‘model.pkl’)
model = torch.load(‘model.pkl’)

仅保存和加载模型参数(推荐使用)

torch.save(model_object.state_dict(), ‘params.pkl’)
model_object.load_state_dict(torch.load(‘params.pkl’))

你可能感兴趣的:(pytorch中模型的保存与加载)