06 - PyTorch自带的网络模型
神经网络模型
https://pytorch.org/vision/stable/models.html
VGG模型示例
https://pytorch.org/vision/stable/models/vgg.html
import torchvision
# 这个数据集不能公开访问了
# train_data = torchvision.datasets.ImageNet(root="./dataset/data_image_net", split="train", download=True,
# transform=torchvision.transforms.ToTensor())
# torchvision 0.13 的版本后,"pretrained" 参数已被废弃,使用weights
# 不使用预训练权重
vgg16_false = torchvision.models.vgg16(weights=None)
# 默认地,关于 ImageNet 1K 的预训练权重将会载入,
vgg16_true = torchvision.models.vgg16(weights="DEFAULT")
print("ok")
print(vgg16_true)
许多框架会把VGG16当作前置框架,使用VGG16提取特征,在VGG16后面加一些网络结构实现功能。
vgg16_true.add_module("add_Linear", nn.Linear(in_features=1000, out_features=10))
vgg16_true.classifier.add_module("add_Linear", nn.Linear(in_features=1000, out_features=10))
print(vgg16_true)
vgg16_false.classifier[6] = nn.Linear(in_features=4096, out_features=10)
print(vgg16_false)
import torchvision
from torch import nn
# 尽管我们不能公开访问ImageNet数据集,但可以预设代码用于下载和转换ImageNet数据集,
# 其中包括将图片数据转化为tensor类型。
# train_data = torchvision.datasets.ImageNet(root="./dataset/data_image_net", split="train",
# download=True, transform=torchvision.transforms.ToTensor())
# 从 torchvision 0.13版本开始,"pretrained" 参数已被废弃。现在我们使用"weights"参数来载入预训练模型。
# 如果weights设为None,表示我们不使用预训练权重来初始化VGG16模型。
vgg16_false = torchvision.models.vgg16(weights=None)
# 如果weights设为"DEFAULT",则会自动载入在ImageNet 1K数据集上的预训练权重来初始化VGG16模型。
vgg16_true = torchvision.models.vgg16(weights="DEFAULT")
# 为预训练模型在最后添加一个新的线性层,输入特征大小为1000,输出特征大小为10。
# 这样做可以允许我们利用预训练模型的特征学习能力,并适配我们特殊任务的类别数。
vgg16_true.add_module("add_Linear", nn.Linear(in_features=1000, out_features=10))
# 也可添加到预训练模型内部的分类器部分
vgg16_true.classifier.add_module("add_Linear", nn.Linear(in_features=1000, out_features=10))
# 输出没有使用预训练权重的VGG16模型结构
print(vgg16_false)
# 修改没有使用预训练权重的VGG16模型最后的全连接层,
# 分类器的第6层(下标从0开始)是一个全连接层,将其输出特征大小由默认的1000改为10。
vgg16_false.classifier[6] = nn.Linear(in_features=4096, out_features=10)
# 输出修改后的VGG16模型结构
print(vgg16_false)