1.对网络结构和模型参数的保存
有两种方式:
1.1
保存整个神经网络的结构信息和模型参数信息,save的对象是网络模型。
我们假设训练好的模型名为net0,则
#保存整个神经网络结构和结构的模型参数
torch.save(net0,'net0.pth')
torch.save(net0,'net0.pkl')
这种方式消耗的内存较大
1.2
只保存神经网络的训练模型参数,save的对象是net.state_dict()。
我们假设训练好的模型名为net0,则
#只保存神经网络的模型参数
torch.save(net0.state_dict(),'net0.pth')
torch.save(net0.state_dict(),'net0.pkl')
保存的是一个collections.OrderedDict()字典形式。
字典是key值对应参数层的名称,value值对key层相应的参数值。
2. 不同后缀名的pytorch模型文件的区别与联系
pth是path的缩写,pkl是pickle的缩写。
.pkl和.pth文件都是以二进制形式存储的,用pickle这个库加载.pkl和.pth文件,效果相同。
如果你是使用torch.save方法来进行模型参数的保存,那保存文件的后缀其实没什么区别,结果都是一样的,只是.pth用的更多一些。
但如果应用场景不在这里这两种(.pkl、.pth)格式的文件还是有区别的:
①.pkl文件是python里保存文件的一种格式,如果直接打开会显示序列化内容,其实是以二进制形式存储的,若要阅读文件,需要用’rb’而不是’r’。
②.pth文件有不同的应用,python在遍历已知库文件目录过程中,如果见到一个.pth文件,就会将文件中所记录的路径加入到sys.path设置中,于是.pth文件指明的库也就可以被python运行环境找到。