卷积神经网络深度探索:VGG网络深度学习与应用

使用块的网络(VGG)

学习目标

通过本课程的学习,学员将理解VGG网络如何使用可复用的卷积块构造,掌握通过调整每个块中卷积层数量和输出通道数量来定义不同VGG模型的方法,并认识到深层且窄的卷积在效果上优于浅层且宽的卷积。

相关知识点

  • VGG网络以及模型训练

学习内容

虽然AlexNet证明深层神经网络卓有成效,但它没有提供一个通用的模板来指导后续的研究人员设计新的网络。我们将介绍一些常用于设计深层神经网络的启发式概念。

与芯片设计中工程师从放置晶体管到逻辑元件再到逻辑块的过程类似,神经网络架构的设计也逐渐变得更加抽象。研究人员开始从单个神经元的角度思考问题,发展到整个层,现在又转向块,重复层的模式。

使用块的想法首先出现在牛津大学的视觉几何组(visual geometry group)的VGG网络中。通过使用循环和子程序,可以很容易地在任何现代深度学习框架的代码中实现这些重复的架构。

1 VGG网络以及模型训练

1.1 VGG块

经典卷积神经网络的基本组成部分是下面的这个序列:

  1. 带填充以保持分辨率的卷积层;
  2. 非线性激活函数,如ReLU;
  3. 汇聚层,如最大汇聚层。

而一个VGG块与之类似,由一系列卷积层组成,后面再加上用于空间下采样的最大汇聚层。在最初的VGG论文中(Simonyan and Zisserman, 2014),作者使用了带有3 × 3 3\times33×3卷积核、填充为1(保持高度和宽度)的卷积层,和带有2 × 2 2 \times 22×2汇聚窗口、步幅为2(每个块后的分辨率减半)的最大汇聚层。在下面的代码中,我们定义了一个名为vgg_block的函数来实现一个VGG块。

该函数有三个参数,分别对应于卷积层的数量num_convs、输入通道的数量in_channels
和输出通道的数量out_channels.

%pip install d2l
importtorchimporttorchvisionfromtorch.utilsimportdatafromtorchvisionimporttransformsimporttorch_npufromtorch_npu.contribimporttransfer_to_npufromtorchimportnnfromd2limporttorchasd2ldefvgg_block(num_convs,in_channels,out_channels):layers=[]for_inrange(num_convs):layers.append(nn.Conv2d(in_channels,out_channels,kernel_size=3,padding=1))layers.append(nn.ReLU())in_channels=out_channels layers.append(nn.MaxPool2d(kernel_size=2,stride=2))returnnn.Sequential(*layers)
1.2 VGG网络

与AlexNet、LeNet一样,VGG网络可以分为两部分:第一部分主要由卷积层和汇聚层组成,第二部分由全连接层组成。如图1中所示。

图1 从AlexNet到VGG,它们本质上都是块设计。

VGG神经网络连接图1的几个VGG块(在vgg_block函数中定义)。其中有超参数变量conv_arch。该变量指定了每个VGG块里卷积层个数和输出通道数。全连接模块则与AlexNet中的相同。

原始VGG网络有5个卷积块,其中前两个块各有一个卷积层,后三个块各包含两个卷积层。
第一个模块有64个输出通道,每个后续模块将输出通道数量翻倍,直到该数字达到512。由于该网络使用8个卷积层和3个全连接层,因此它通常被称为VGG-11。

conv_arch=((1,64),(1,128),(2,256),(2,512),(2,512))

下面的代码实现了VGG-11。可以通过在conv_arch上执行for循环来简单实现。

defvgg(conv_arch):conv_blks=[]in_channels=1# 卷积层部分for(num_convs,out_channels)inconv_arch:conv_blks.append(vgg_block(num_convs,in_channels,out_channels))in_channels=out_channelsreturnnn.Sequential(*conv_blks,nn.Flatten(),# 全连接层部分nn.Linear(out_channels*7*7,4096),nn.ReLU(),nn.Dropout(0.5),nn.Linear(4096,4096),nn.ReLU(),nn.Dropout(0.5),nn.Linear(4096,10))net=vgg(conv_arch)

接下来,我们将构建一个高度和宽度为224的单通道数据样本,以观察每个层输出的形状。

X=torch.randn(size=(1,1,224,224))forblkinnet:X=blk(X)print(blk.__class__.__name__,'output shape:\t',X.shape)
Sequential output shape: torch.Size([1, 64, 112, 112]) Sequential output shape: torch.Size([1, 128, 56, 56]) Sequential output shape: torch.Size([1, 256, 28, 28]) Sequential output shape: torch.Size([1, 512, 14, 14]) Sequential output shape: torch.Size([1, 512, 7, 7]) Flatten output shape: torch.Size([1, 25088]) Linear output shape: torch.Size([1, 4096]) ReLU output shape: torch.Size([1, 4096]) Dropout output shape: torch.Size([1, 4096]) Linear output shape: torch.Size([1, 4096]) ReLU output shape: torch.Size([1, 4096]) Dropout output shape: torch.Size([1, 4096]) Linear output shape: torch.Size([1, 10])

正如从代码中所看到的,我们在每个块的高度和宽度减半,最终高度和宽度都为7。最后再展平表示,送入全连接层处理。

1.3 获取数据集
!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/4e9acf4414ed11f09ef9fa163edcddae/FashionMNIST.zip
!unzip FashionMNIST.zip

现在我们定义load_data_fashion_mnist函数,用于获取和读取Fashion-MNIST数据集。
这个函数返回训练集和验证集的数据迭代器。
此外,这个函数还接受一个可选参数resize,用来将图像大小调整为另一种形状。

defload_data_fashion_mnist(batch_size,resize=None):#@save"""下载Fashion-MNIST数据集,然后将其加载到内存中"""trans=[transforms.ToTensor()]ifresize:trans.insert(0,transforms.Resize(resize))trans=transforms.Compose(trans)mnist_train=torchvision.datasets.FashionMNIST(root="./data",train=True,transform=trans,download=False)mnist_test=torchvision.datasets.FashionMNIST(root="./data",train=False,transform=trans,download=False)return(data.DataLoader(mnist_train,batch_size,shuffle=True,num_workers=4),data.DataLoader(mnist_test,batch_size,shuffle=False,num_workers=4))
1.4 训练模型

由于VGG-11比AlexNet计算量更大,因此我们构建了一个通道数较少的网络,足够用于训练Fashion-MNIST数据集。

ratio=4small_conv_arch=[(pair[0],pair[1]//ratio)forpairinconv_arch]net=vgg(small_conv_arch)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吐血推荐8个一键生成论文工具,研究生轻松搞定学术写作!

吐血推荐8个一键生成论文工具,研究生轻松搞定学术写作! AI 工具正在改变学术写作的规则 在研究生阶段,论文写作往往成为一项既耗时又费力的任务。从选题到开题,从大纲搭建到初稿撰写,再到反复修改和降重,每…

KingbaseES数据库备份与恢复深度解析:原理、策略与实践

第一章 数据库备份与恢复核心理论 1.1 备份与恢复的本质意义 数据库作为信息系统的核心载体,其数据完整性与可用性直接决定业务连续性。在计算机系统运行过程中,不可避免会遭遇各类故障,包括事务内部故障(如死锁、数据校验错误&am…

长晶科技车规级稳压二极管:多系列全布局 护航汽车电子稳定运行

在汽车电子架构不断向智能化、集成化升级的背景下,稳压二极管作为电路稳压、过压保护的核心元器件,其车规级产品需满足更高的可靠性、稳定性及环境适应性要求。长晶科技深耕半导体器件领域,针对汽车电子应用场景推出多款车规级稳压二极管系列…

一篇讲透网络安全:核心技术与知识图谱构建指南

1 TCP/IP 模型基础 OSI参考模型 OSI(Open System Interconnect Reference Model),开放式系统互联参考模型,它是由 国际标准化组织 ISO 提出的一个网络系统互连模型。 OSI 模型的设计目的是成为一个所有销售商都能实现的开放网络模型,来克服…

深度学习毕设项目:基于python深度学习的手势识别数字

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

如何训练——变电站设备分割数据集15类地面分割数据集,共1660幅图像注释了15类,包括绝缘子、隔离开关、变压器和变电站环境中常见的其他设备人工、固定和AGV安装的相机组合拍摄的,数据集1.6GB

变电站设备分割数据集,变电站设备15类地面分割数据集,共1660幅图像注释了15类,包括绝缘子、隔离开关、变压器和变电站环境中常见的其他设备(包括瓷器绝缘体、闭合叶片断开开关、重合闸、玻璃绝缘子串、电流变压器、避雷器、电源变…

Arbess速成手册(11) - 集成GitLab实现.Net 项目自动化构建并主机部署

Arbess 是一款开源免费的 CI/CD 工具,支持免费私有化部署,一键安装零配置,简明易用。本文将详细介绍如何安装Arbess、GitLab,创建流水线实现 .Net Core 项目自动化部署。 1、GitLab 安装与配置 本章节将介绍如何使用CentOS9搭建…

一文讲透黑客、骇客、白客、红客:别再傻傻分不清!

黑客 起源 “黑客”一词是英文Hacker的音译。这个词早在莎士比亚时代就已存在了,但是人们第一次真正理解它时,却是在计算机问世之后。根据《牛津英语词典》解释,“hack”一词最早的意思是劈砍,而这个词意很容易使人联想到计算机…

计算机深度学习毕设实战-基于人工智能的手势识别数字

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Arbess速成手册(12) - 集成GitLab实现C++项目自动化构建并主机部署

Arbess 是一款开源免费的 CICD 工具,支持免费私有化部署,一键部署零配置。本文将详细介绍如何安装Arbess、GitLab,创建流水线实现 C 项目自动化构建并主机部署。 1、GitLab 安装与配置 本章节将介绍如何使用CentOS9搭建Gitlab服务器&#x…

艾体宝案例 | 某大型科技企业基于Lepide构建可持续数据安全审计体系的实战案例

摘要本白皮书系统阐述了一家拥有超过1500名活跃AD用户的大型科技企业,在复杂的混合IT环境中,通过部署Lepide数据安全平台,实现全面、可持续的数据安全治理与合规审计的完整历程。案例深入剖析了从需求分析、方案选型、标准化部署,…

Arbess速成手册(13) - 集成Gitee、SonarQube实现Node.js项目自动化构建并主机部署

Arbess 是一款开源免费的 CI/CD 工具,支持免费私有化部署,一键安装零配置。本文将详细介绍如何安装使用ArbessGiteeSonarQube实现Node.js项目代码扫描并自动化部署。 1、Gitee 安装与配置 本章节将介绍如何使用创建Gitee个人密匙,提供给Arb…

基于SpringBoot的房屋租赁平台 Java源代码 免费分享

房屋租赁系统包含以下核心功能模块,可根据不同用户角色(租客、房东/中介、管理员)和业务需求进行扩展: 一、用户端(租客/房东通用) 用户注册与登录 手机/邮箱注册、第三方登录(微信、支付宝等&a…

Springboot健身管理系统85ws5(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:用户,健身教练,健身课程,课程报名,预约教练开题报告内容一、研究背景与意义1.1 研究背景随着现代生活节奏的加快和人们健康意识的提升,健身已成为城市居民保持健康、塑造身材的重要方式。健身房作为提供专业健身服务的场所&…

如何利用工业智能体提升汽车制造效率与良品率?

在新一轮制造业智能化浪潮中,工业智能体正成为推动产业变革的核心力量,尤其在汽车制造领域,其价值已从概念验证迈向规模化落地。作为融合大语言模型、工业机理与多源数据的新型认知智能系统,工业智能体不再局限于单一任务的自动化…

Python全栈项目--基于Django的项目管理系统

项目概述 项目管理系统是企业日常运营中不可或缺的工具,它能够帮助团队高效地组织、跟踪和管理各类项目任务。本文将介绍如何使用Django框架构建一个功能完善的项目管理系统,涵盖从需求分析到部署的完整开发流程。 技术栈选型 后端技术 Django 4.2: …

springboot分页不分页情况

资源链接 https://download.csdn.net/download/hashiqimiya/92539595 该资源的项目有两个接口 GetMapping("/page")public R page(RequestParam int page,RequestParam int size) {Page<Product> p new Page<>(page, size);System.out.println("p…

深度学习毕设选题推荐:基于python深度学习的手势识别数字机器学习

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

如何通过模具智能管理降低汽车生产线的停机时间?

在工业4.0深度演进的背景下&#xff0c;模具智能管理正成为制造业提质增效的核心引擎&#xff0c;尤其在汽车这一高度精密、高节奏的产业中&#xff0c;其价值尤为凸显。传统依赖人工经验、固定周期保养的模具管理模式&#xff0c;早已难以应对现代汽车生产对稳定性、一致性与响…