torchvision.models简介

这篇具有很好参考价值的文章主要介绍了torchvision.models简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 torchvision.models介绍

1.1 torchvision介绍

PyTorch框架中有一个非常重要且好用的包:torchvision,该包主要由3个子包组成,分别是:torchvision.datasets、torchvision.models、torchvision.transforms

该篇主要介绍torchvision.models,关于torchvision.datasets 和 torchvision.transforms 可以看以下几篇:
https://blog.csdn.net/Alexa_/article/details/129408512

1.2 torchvision.models

torchvision.models:这个包中包含alexnet、densenet、inception、resnet、squeezenet、vgg等常用的网络结构,并且提供了预训练模型,可以通过简单调用来读取网络结构和预训练模型。

torchvision.models模块的子模块中包含以下模型结构:

  • AlexNet
  • VGG: VGG-11, VGG-13, VGG-16, VGG-19
  • ResNet: ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152
  • SqueezeNet: SqueezeNet 1.0, and SqueezeNet 1.1
  • DenseNet:Densenet-121,Densenet-169,Densenet-161,Densenet-201

(1),预训练模型可以通过设置pretrained=True来构建

import torchvision.models as models

resnet18 = models.resnet18(pretrained=True)
vgg16 = models.vgg16(pretrained=True)
alexnet = models.alexnet(pretrained=True)
squeezenet = models.squeezenet1_0(pretrained=True)

  • 预训练模型期望的输入是RGB图像的mini-batch:(batch_size, 3, H, W),并且H和W不能低于224。
  • 图像的像素值必须在范围[0,1]间,并且用均值mean=[0.485, 0.456, 0.406]和方差std=[0.229, 0.224, 0.225]进行归一化。

下载的模型可以通过state_dict() 来打印状态参数、缓存的字典,如下所示:

import torchvision.models as models
vgg16 = models.vgg16(pretrained=True)
# 返回包含模块所有状态的字典,包括参数和缓存
pretrained_dict = vgg16.state_dict()

(2),只需要网络结构,不加载参数来初始化,可以将pretrained = False

model = torchvision.models.densenet169(pretrained=False)
# 等价于:
model = torchvision.models.densenet169()

2 导入模型举例

应用VGG16模型,并进行改动,以适应CIDIAR10数据集

  • CIFAR10数据集是 10个类别
  • VGG16输出是1000个类别
  • VGG 加一层输出10个类别

2.1 模型的使用

导入模型,输出查看网络结构:

import torchvision
# 直接调用,实例化模型,pretrained代表是否下载预先训练好的参数
vgg16_false = torchvision.models.vgg16(pretrained = False)
vgg16_ture = torchvision.models.vgg16(pretrained = True)
print(vgg16_ture)

输出结果,可以看到VGG16的结构,可以看出,其最后一行 out_features = 1000.

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=(3, 3), stride=(1, 1), padding=(1, 1))
    (11): ReLU(inplace=True)
    (12): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (13): ReLU(inplace=True)
    (14): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (15): ReLU(inplace=True)
    (16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (17): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (18): ReLU(inplace=True)
    (19): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (20): ReLU(inplace=True)
    (21): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (22): ReLU(inplace=True)
    (23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (24): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (25): ReLU(inplace=True)
    (26): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (27): ReLU(inplace=True)
    (28): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (29): ReLU(inplace=True)
    (30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
    (avgpool): AdaptiveAvgPool2d(output_size=(7, 7))
  (classifier): Sequential(
    (0): Linear(in_features=25088, out_features=4096, bias=True)
    (1): ReLU(inplace=True)
    (2): Dropout(p=0.5, inplace=False)
    (3): Linear(in_features=4096, out_features=4096, bias=True)
    (4): ReLU(inplace=True)
    (5): Dropout(p=0.5, inplace=False)
    (6): Linear(in_features=4096, out_features=1000, bias=True)
  )
)

2.2 模型的修改

  • 修改方式1:如在classifier 新增一层全连接层, 使用 add.module()
vgg16_ture.classifier.add_module("add_linear",torch.nn.Linear(1000,10)) # 在vgg16的classfier里加一层
print(vgg16_ture)

输出之后,在classifier里,可以看到,最后一行:out_features = 10

 (classifier): Sequential(
    (0): Linear(in_features=25088, out_features=4096, bias=True)
    (1): ReLU(inplace=True)
    (2): Dropout(p=0.5, inplace=False)
    (3): Linear(in_features=4096, out_features=4096, bias=True)
    (4): ReLU(inplace=True)
    (5): Dropout(p=0.5, inplace=False)
    (6): Linear(in_features=4096, out_features=1000, bias=True)
    (add_linear): Linear(in_features=1000, out_features=10, bias=True)
  )
  • 修改方式2:直接修改对应层,编码相对应
print(vgg16_false)
vgg16_false.classifier[6] = nn.Linear(4096,10) # 修改对应层,编号相对应
print(vgg16_false)

修改之前与修改之后对比,可以看到classifier中第6行的变化:

#修改前:
(classifier): Sequential(
    (0): Linear(in_features=25088, out_features=4096, bias=True)
    (1): ReLU(inplace=True)
    (2): Dropout(p=0.5, inplace=False)
    (3): Linear(in_features=4096, out_features=4096, bias=True)
    (4): ReLU(inplace=True)
    (5): Dropout(p=0.5, inplace=False)
    (6): Linear(in_features=4096, out_features=1000, bias=True)
  )

#修改后:
(classifier): Sequential(
    (0): Linear(in_features=25088, out_features=4096, bias=True)
    (1): ReLU(inplace=True)
    (2): Dropout(p=0.5, inplace=False)
    (3): Linear(in_features=4096, out_features=4096, bias=True)
    (4): ReLU(inplace=True)
    (5): Dropout(p=0.5, inplace=False)
    (6): Linear(in_features=4096, out_features=10, bias=True)
  )


2.3 模型的保存和读取

模型的保存与存取,两种方式

  • 方式1:直接 保存和加载模型:

  • 方式2:字典方式只保存参数:j加载模型还的调用原来的神经网络

import torch
import torchvision

vgg16 = torchvision.models.vgg16(pretrained = False)

# 保存方法 1 
torch.save(vgg16,"vgg16_method1.pth") # 保存结构模型和参数、保存路径
# 加载模型 1
model = torch.load("vgg16_method1.pth")

# 保存方式 2 -- 以字典方式只保存参数(官方推荐),
torch.save(vgg16.state_dict(),"vgg_method2.pth") 
# 加载方式 2 -- 要恢复网络模型
model = torch.load("vgg_method2.pth")
vgg16 = torchvision.models.vgg16(pretrained = True)
vgg16.load_state_dict(torch.load("vgg_method2.pth"))



参考:

https://blog.csdn.net/shanshangyouzhiyangM/article/details/83143740

https://blog.csdn.net/weixin_44953928/article/details/124216322文章来源地址https://www.toymoban.com/news/detail-668544.html

到了这里,关于torchvision.models简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机视觉】干货分享:Segmentation model PyTorch(快速搭建图像分割网络)

    如何快速搭建图像分割网络? 要手写把backbone ,手写decoder 吗? 介绍一个分割神器,分分钟搭建一个分割网络。 仓库的地址: 该库的主要特点是: 高级 API(只需两行即可创建神经网络) 用于二元和多类分割的 9 种模型架构(包括传奇的 Unet) 124 个可用编码器(以及 timm

    2024年02月14日
    浏览(46)
  • 【深度学习PyTorch入门】6.Optimizing Model Parameters 优化模型参数

    现在我们有了模型和数据,是时候通过优化数据上的参数来训练、验证和测试我们的模型了。训练模型是一个迭代过程;在每次迭代中,模型都会对输出进行猜测,计算其猜测中的误差( 损失 ),收集相对于其参数的导数的误差(如我们在上一节中看到的),并使用梯度下

    2024年01月24日
    浏览(62)
  • 【深度学习:Micro-Models】用于标记图像和视频的微模型简介

    在本文中,我们将介绍 Encord 用于自动化数据注释的“微模型”方法。我们已将这种方法部署到各个领域的计算机视觉标记任务中,包括医学成像、农业、自动驾驶汽车和卫星成像。 让我们切入正题: 什么是微模型 低偏差模型适用于数据集中的一小组图像或视频。 微模型如

    2024年01月20日
    浏览(50)
  • 深度学习:Pytorch常见损失函数Loss简介

    此篇博客主要对深度学习中常用的损失函数进行介绍,并结合Pytorch的函数进行分析,讲解其用法。 L1 Loss计算预测值和真值的平均绝对误差。 L o s s ( y , y ^ ) = ∣ y − y ^ ∣ Loss(y,hat{y}) = |y-hat{y}| L oss ( y , y ^ ​ ) = ∣ y − y ^ ​ ∣ Pytorch函数: 参数: size_average (bool, optional) –

    2024年02月13日
    浏览(44)
  • 深度学习|10.1 深度学习在计算机视觉的应用

    图像中的每一个像素点都是输入层的一部分。而最终最后只有一个输出点,也就是说需要通过乘上中间层/隐藏层内部的矩阵,从而实现降维。 直观上,信息越多,分析的效果应该越好,但也意味着分析的量会越来越大,考虑到分析所需要的时间和空间,往往采用卷积的方式

    2024年02月03日
    浏览(50)
  • 【计算机视觉中的 GAN 】 - 生成学习简介(1)

            在阅读本文之前,强烈建议先阅读预备知识,否则缺乏必要的推理基础。本文是相同理论GAN原理的具体化范例,阅读后有两个好处:1 巩固了已经建立的GAN基本概念 2 对具体应用的过程和套路进行常识学习,这种练习题一般的项目,是需要反复几个才能成为行家。

    2024年02月14日
    浏览(44)
  • 深度学习论文: Rethinking Mobile Block for Efficient Attention-based Models及其PyTorch实现

    深度学习论文: Rethinking Mobile Block for Efficient Attention-based Models及其PyTorch实现 Rethinking Mobile Block for Efficient Attention-based Models PDF: https://arxiv.org/pdf/2301.01146.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks EMO是高效、轻量级的模型

    2024年02月09日
    浏览(43)
  • 深度学习与计算机视觉

    目录 1 深度学习 1.1 人工智能 1.2 机器学习 1.3 深度学习 1.3.1 深度学习发展历程 1.3.2 深度学习中的核心因素 1.3.3 深度学习模型分类 1.3.4 深度学习框架 2 计算机视觉 人工智能、机器学习、深度学习这三者的关系: 在实现人工智能的众多算法中,机器学习是发展较为快速的

    2024年02月06日
    浏览(48)
  • 【深度学习: 计算机视觉】如何改进计算机视觉数据集

    机器学习算法需要大量数据集来训练、提高性能并生成组织所需的结果。 数据集是计算机视觉应用程序和模型运行的燃料。数据越多越好。这些数据应该是高质量的,以确保人工智能项目获得最佳的结果和产出。 获取训练机器学习模型所需数据的最佳方法之一是使用开源数

    2024年02月20日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包