Pytorch(10)-模型保存与载入(上)(GPU/CPU)

模型保存与提取

  • 1.网络保存
  • 2. 网络提取
  • 3.GPU/CPU模型保存与导入

神经网络模型在线训练完之后需要保存下来,以便下次使用时可以直接导入已经训练好的模型。pytorch 提供两种方式保存模型,一种是直接保存整个模型,另一种只保存模型参数。

1.网络保存

torch.save(net1, ‘net.pkl’) # 保存整个网络

torch.save(net1.state_dict(), ‘net_params.pkl’) # 只保存网络中的参数 (速度快, 占内存少)

2. 网络提取

net2 = torch.load(‘net.pkl’)

net3.load_state_dict(torch.load(‘net_params.pkl’))#net3 需要提前创建好,结构应该和net1是一样的

参考文档:https://morvanzhou.github.io/tutorials/machine-learning/torch/3-04-save-reload/

迷糊的现象

在使用莫烦的文档做实验时,保存的两个文件:net.pkl,net_params.pkl大小差异比较大。保证在导入模型是比较快。
在这里插入图片描述
但是使用torchvision.models.模块中的一系列网络时,因为网络的参数很大,所以实验过程中用两种方法保存模型的文件大小是一致的。(猜测是内置模型使用torch.save(net1, ‘net.pkl’)时默认保存的是模型参数)

下面提供了一个神经网络模型占用空间大小的计算方法:
在这里插入图片描述
参考文档:https://www.cnblogs.com/sindy-zhang/p/9012340.html(上图来自此篇文档)

3.GPU/CPU模型保存与导入

在训练是模型是GPU/CPU,决定了模型载入时的模型原型。可以分为下面三种情况(只展示导入整个网络模型的情况,具体实验还没做过):
1.CPU(模型文件)->CPU,GPU(模型文件)->GPU

torch.load( ‘net.pkl’)

2.GPU(模型文件)->CPU

torch.load(‘model_dict.pkl’, map_location=lambda storage, loc: storage)

3.CPU(模型文件)->GPU

torch.load(‘model_dic.pkl’, map_location=lambda storage, loc: storage.cuda)

参考文档:https://blog.csdn.net/u012135425/article/details/85217542

你可能感兴趣的:(pytorch)