VGG16模型的加载、保存与修改
该模型主要是用来 识别 ImageNet 数据集的。
16 的由来:该模型包含16个权重层(13个卷积层和3个全连接层),因此得名VGG16。
模型官网:vgg16 — Torchvision 0.20 documentation
(一) 从官网加载 VGG16 模型
① 在 pycharm 中加载官网 已经训练好 的 VGG16 模型的指令:
-
使用该网络模型进行 ImageNet 的 1000 种类别的 分类任务(完整权重):
vgg16_true = torchvision.models.vgg16(weights=torchvision.models.VGG16_Weights.IMAGENET1K_V1)
其中参数 weights 指定了要加载的预训练权重;V1 通常指的是模型的第一个版本或第一个公开发布的权重集。
2024年目前情况下,这个参数是默认的,即 weights 可直接指定为 DEFAULT :
weights=torchvision.models.VGG16_Weights.DEFAULT
不过 DEFAULT 一般都会指向新的权重版本,所以当官方更新最新权重之后(即 IMAGENET1K_V1 不再是最新的),就要慎重使用此命令。
-
仅提供在 特征提取阶段 训练过的权重(只有 13 个卷积层训练好的权重):
vgg16_true = torchvision.models.vgg16(weights=torchvision.models.VGG16_Weights.IMAGENET1K_FEATURES)
这些权重可能缺少分类器模块(即全连接层)的权重。
加载好的VGG16模型参数如下:
VGG(
(features): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace=True)
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace=True)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(5): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(6): ReLU(inplace=True)
(7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(8): ReLU(inplace=True)
(9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(10): Conv2d(128, 256, kernel_size=