一、模型保存与加载
我理解的模型的保存就是训练多少轮保存一个模型,之后可以选一个最好的做预训练模型。
两种保存方法
方法一:torch.save
保存:模型结构+模型参数
vgg16 = torchvision.models.vgg16(pretrained=False)
#保存方式1
torch.save(vgg16,"vgg16_method1.pth")
#可指定保存路径
#引号里改成/Users/bbing517/Downloads/蚂蚁数据集/hymenoptera_data/神经网络/vgg16_method1.pth就ok
加载的话,就新建另一个py文件,之后写 torch.load
model = torch.load("/Users/bbing517/Downloads/蚂蚁数据集/hymenoptera_data/神经网络/vgg16_method1.pth")
print(model)
输出结果就是vgg跟上一节的一样
方法二:还是torch.save,torch.save(vgg16.state_dict(), "文件位置/名称.pth")
保存:模型参数
dict用到了字典,就是把网络模型的参数保存成字典的形式,保存模型的状态,不再是保存网络模型的结构了。
加载同上,输出结果却都是字典。
如果想给他换回模型的形式,就要先加载加进去一个网络模型结构。
vgg16 = torchvision.models.vgg16(pretrained=False)
#好像现在pretrained=False就是`weights=None`.
#model2 = torch.load("/Users/bbing517/Downloads/蚂蚁数据集/hymenoptera_data/神经网络/vgg16_method2.pth")
vgg16.load_state_dict(torch.load("/Users/bbing517/Downloads/蚂蚁数据集/hymenoptera_data/神经网络/vgg16_method2.pt"))
print(vgg16)
方法一、二对比:二保存的东西更少,占用内存更少,更适合大的模型。
可以使用命令行ls -all
看一下两个保存的不同的pth文件多大。
二、自己的模型/网络如何保存
在保存.py中,定义tudui并保存
class Tudui(nn.Module):
def __init__(self):
super(Tudui, self).__init__()
self.model1 = Sequential(
Conv2d(3, 32 , 5, padding = 2),
MaxPool2d(2),
Conv2d(32, 32, 5,padding = 2),
MaxPool2d(2),
Conv2d(32, 64, 5, padding = 2),
MaxPool2d(2),
Flatten(),
Linear(1024, 64),
Linear(64, 10)
)
def forward(self,x):
x = self.model1(x)
return x
tudui = Tudui()
torch.save(tudui,"/Users/bbing517/Downloads/蚂蚁数据集/hymenoptera_data/神经网络/tudui.pth")
在加载.py中
model = torch.load("/Users/bbing517/Downloads/蚂蚁数据集/hymenoptera_data/神经网络/tudui.pth")
print(model)
但是报错
解决方法1:在加载.py中复制来class Tudui的全部内容
解决方法2:from 保存 import Tudui
注意:保存应该是英文名,对应”保存.py“
from P26save import Tudui
model = torch.load("/Users/bbing517/Downloads/蚂蚁数据集/hymenoptera_data/神经网络/tudui.pth")
print(model)