1.保存:两种方法
a.保存网络模型结构
b.保存网络模型的状态(推荐,因为这种仅仅保存参数,所需空间较小)
以下是代码
#保存方式1,模型结构+参数
vgg16=torchvision.models.vgg16(weights=None)#不需要预训练的权重
torch.save(vgg16,"vgg16_1.pth")
#保存方式2,模型参数d
torch.save(vgg16.state_dict(),"vgg16_2.pth")
#方式1下的加载模型(注意如果是写在两个文件里的要 from 。。。 import *)
model=torch.load("vgg16_1.pth")
#方式2下的加载模型
vgg16=torchvision.models.vgg16(weights=None)#不需要预训练的权重
vgg16.load_state_dict(torch.load("vgg16_2.pth"))
print(vgg16)
加载效果:得到网络结构及参数
2.已有模型修改
a.加在模型的后面
vgg16_true=torchvision.models.vgg16(weights=True)
vgg16_true.add_module('add_linear',nn.Linear(1000,10))
print(vgg16_true)
效果:
b.
加在一个模块的里面
vgg16_true=torchvision.models.vgg16(weights=True)
vgg16_true.classifier.add_module('add_linear',nn.Linear(1000,10))#加在classifier这部分最后
print(vgg16_true)
效果:
c.修改模型某一层
vgg16_false.classifier[6]=nn.Linear(4096,10)
print(vgg16_false)
特别注意要在换之前看一下前一层输出大小,确定自己这层的输入大小,效果图
至此模型套路的讲解就结束啦,开始炼丹吧!