【神经网络】06 - PyTorch自带的网络模型

本文介绍了如何在PyTorch中使用VGG模型,包括加载预训练权重、自定义网络结构以及修改全连接层,以适应特定任务的需要。
摘要由CSDN通过智能技术生成

06 - PyTorch自带的网络模型

神经网络模型

https://pytorch.org/vision/stable/models.html

img

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")

img

print(vgg16_true)

imgimg

许多框架会把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)

img

vgg16_false.classifier[6] = nn.Linear(in_features=4096, out_features=10)
print(vgg16_false)

img

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值