现成网络模型的迁移学习和网络模型的保存与读取

下面是迁移学习的相关内容
# 以下是迁移学习的相关内容
# 以VGG16来进行示范
import torch
import torchvision
import winnt
from torch import nn

VGG16 = torchvision.models.vgg16(pretrained=True)
# pretrained 是指是否调用已经预训练好的参数模型,即里面的权重是否调用已经训练好的
print(VGG16)
# 查看网络架构
tran_dataset = torchvision.datasets.CIFAR10("./data",train=True,transform=torchvision.transforms.ToTensor(),download=True)

# 下面是对一个迁移的网络进行更改的操作
VGG16.add_module('add_Linear',nn.Linear(1000,10))
print(VGG16)
# 这是在整个网络的最后加上一个线性层,原来他预训练好的使用数据集是1000哥类别,
# 这里想改成10个类别,因此才这样改让1*1*1000变成1*1*10
# 但是这个是加载整个网络的后面,如果相加在某个板块的里面的最后一个,就在add前面加上那个板块
# 比如说VGG16.classifier.add_module('add_Linear',nn.Linear(1000,10))

# 下面是修改某个板块
# VGG16.classifier[6] = nn.Linear(4096,10)
# 首先我们是想改classifier中的第7句话,在前面输出网络结构就能看懂这个6是指
# nn.Linear 的标号,然后直接进行修改就行,注意是是[]而不是()。

下面是网络模型的保存和读取的相关内容

# 保存以及读取我们训练的网络模型:
vgg16 = torchvision.models.vgg16(pretrained=False)

# 方式一
torch.save(vgg16,"vgg16.pth")
#vgg16.pth是保存后的文件名,其保存的是整个网络模型及其参数

# 其读取方式:
model = torch.load("vgg16.pth")
print(model)
# 但是这种方式在关于自己的网络模型的时候,在读取的时候是需要进行引入的,比如from你网络模型所在的文件import*,
# 具体参见视频https://www.bilibili.com/video/BV1hE411t7RN?p=26&spm_id_from=pageDriver
# python中import和from import的区别:
# https://blog.csdn.net/qq_35883464/article/details/84400258?spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-14.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-14.pc_relevant_antiscanv2&utm_relevant_index=20



# 方式二:
torch.save(vgg16.state_dict(),"vgg16.pth")
# 其保存的是网络模型中的参数。以字典形式保存的
#
# 其读取方式:
vgg16 = torchvision.models.vgg16(pretrained=False)
vgg16.load_state_dict(torch.load("vgg16.pth"))

你可能感兴趣的:(迁移学习,深度学习,pytorch)