模型实际训练笔记2-VGG

1、VGG简介:

VGG网络是由牛津大学的视觉几何组(visual geometry group)首次提出来的。

VGG 网络,也称为Visual Geometry Group网络,是计算机视觉领域的一个深度卷积神经网络架构。它于2014年由牛津大学的研究团队开发,这个团队在ImageNet图像分类竞赛中取得了显著的成功。VGG 网络之所以受欢迎,部分原因是它的网络结构非常简单和规范,易于理解和实现。

以下是关于 VGG 网络的一些关键特点:

  1. 深度网络:VGG 网络采用了相对较深的网络结构,有16或19层的卷积层,使其成为当时非常深的卷积神经网络之一。这种深度有助于提高网络对图像特征的抽取能力。

  2. 卷积层:VGG 网络主要由卷积层和池化层组成,这两种层交替堆叠。卷积层用于检测图像中的特征,如边缘、纹理和形状,而池化层则用于减小特征图的空间分辨率,降低计算复杂性。

  3. 小卷积核:VGG 网络使用较小的3x3卷积核,但是在卷积层之间增加了大量的卷积层。这种设计决策有助于提高网络的表示能力。

  4. 全连接层:VGG 网络在卷积和池化层之后有几层全连接层,用于最终的分类。这些全连接层在网络的顶部,负责将高层次特征映射到不同类别的概率分布。

  5. 多个版本:VGG 网络有不同版本,最著名的是VGG16和VGG19,它们分别包括16层和19层的卷积层和全连接层。这些版本的主要区别在于网络的深度。

  6. 预训练权重:由于VGG 网络在ImageNet数据集上的出色表现,它的预训练权重在许多计算机视觉任务中都被广泛使用,作为迁移学习的基础。

尽管VGG 网络在其发布时是一种非常有力的图像分类模型,但由于其深度和参数数量较大,后来的网络架构如ResNet和Inception在一些任务上取得了更好的性能,并且具有更高的计算效率。然而,VGG 仍然是深度学习的重要历史里程碑,对于理解卷积神经网络的基本概念和设计原则仍然具有重要价值。

2、VGG网络成功的原因

VGG 网络之所以取得成功,有以下几个重要原因:

  1. 深度网络的探索:VGG 网络采用了相对较深的网络结构,有16或19层的卷积层。在当时,这种深度的卷积神经网络相对较为罕见,VGG 团队的尝试鼓励了研究人员深入探索深度神经网络的潜力。

  2. 小卷积核的使用:VGG 网络使用了3x3的小卷积核,而且在卷积层之间增加了大量的卷积层。这种设计有助于增加网络的深度和表示能力。此外,它引入了重复性,使网络结构更加规范和易于理解。

  3. 预训练权重:VGG 网络在ImageNet图像分类竞赛中表现出色,这意味着它在大规模图像数据上学到了有用的特征表示。这些预训练权重成为了迁移学习的有力工具,研究人员可以在其基础上构建和微调用于各种计算机视觉任务的模型。

  4. 广泛应用:VGG 网络的成功不仅仅限于图像分类,它还在图像检测、图像分割和其他计算机视觉任务中表现出色。这使得它成为一个通用的图像处理工具,为各种应用提供了强大的特征提取功能。

  5. 简单的设计:VGG 网络的设计相对简单,易于理解和实现。这使得它成为了深度学习入门和教育的良好示例,有助于推动深度学习领域的发展。

尽管后来的网络架构如ResNet和Inception在某些任务上表现更好,但VGG 仍然具有重要的历史地位。它的成功激发了深度神经网络领域的创新,促使研究人员更深入地理解卷积神经网络的工作原理,并为迁移学习提供了重要的基础。VGG 的设计原则和深度网络的探索经验对于后来神经网络的发展产生了深远影响。

3、VGG网络的具体介绍

3.1 VGG块

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

  1. 带填充以保持分辨率的卷积层;

  2. 非线性激活函数,如ReLU;

  3. 汇聚层,如最大汇聚层。

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

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

3.2 VGG网络

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

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

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

 3.3 代码实现

import torch
from torch import nn
from d2l import torch as d2ldef vgg_block(num_convs, in_channels, out_channels):layers = []for _ in range(num_convs):layers.append(nn.Conv2d(in_channels, out_channels,kernel_size=3, padding=1))layers.append(nn.ReLU())in_channels = out_channelslayers.append(nn.MaxPool2d(kernel_size=2,stride=2))return nn.Sequential(*layers)conv_arch = ((1, 64), (1, 128), (2, 256), (2, 512), (2, 512))def vgg(conv_arch):conv_blks = []in_channels = 1# 卷积层部分for (num_convs, out_channels) in conv_arch:conv_blks.append(vgg_block(num_convs, in_channels, out_channels))in_channels = out_channelsreturn nn.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)X = torch.randn(size=(1, 1, 224, 224))
for blk in net:X = blk(X)print(blk.__class__.__name__,'output shape:\t',X.shape)ratio = 4
small_conv_arch = [(pair[0], pair[1] // ratio) for pair in conv_arch]
net = vgg(small_conv_arch)lr, num_epochs, batch_size = 0.05, 10, 128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())

3.4 运行结果 

loss 0.181, train acc 0.932, test acc 0.919
3453.8 examples/sec on cuda:0

4 小结

  • VGG-11使用可复用的卷积块构造网络。不同的VGG模型可通过每个块中卷积层数量和输出通道数量的差异来定义。

  • 块的使用导致网络定义的非常简洁。使用块可以有效地设计复杂的网络。

  • 在VGG论文中,Simonyan和Ziserman尝试了各种架构。特别是他们发现深层且窄的卷积(即3×3)比较浅层且宽的卷积更有效。

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

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

相关文章

SpringCloud-Alibaba-Nacos2.0.4

SpringCloud-Alibaba-Nacos2.0.4 SpringCloud Alibaba版本选择(截止到2023年3月12日) Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version2021.0.4.0*Spring Cloud 2021.0.42.6.11 SpringCloud Alibaba-2021.0.4.0组件版本关系 S…

Ant Design Vue Table 表格内容高度自适应+固定表头踩坑

前言 对于非专业前端开发者来使用 Ant Design UI 组件来开发企业级后台管理系统来说是非常不错的选择,但这并不意味着我们能够用好这个框架,因为 UI 交互上和有许多细节上的问题对于非专业前端来说并不容易解决,最近在使用 Table 组件时就遇…

多路转接之epoll

本篇博客介绍: 多路转接之epoll 多路转接之epoll 初识epollepoll相关系统调用epoll的工作原理epoll服务器编写成员变量构造函数 循环函数HandlerEvent函数epoll的优缺点 我们学习epoll分为四部分 快速理解部分概念 快速的看一下部分接口讲解epoll的工作原理手写epo…

软件测试之用例篇(万能公式、具体方法)

目录 1. 概念 2. 万能公式 3.具体设计测试用例的方法 (1)等价类 (2)边界值 (3)判定表(因果图) (4)场景设计法 (5)正交法 如何使用 allparis 生成正交…

洞见UI自动化测试

随着软件行业的不断发展,建立一个完善的自动化测试体系变得至关重要。自动化测试包括三个方面:UI前端界面,Service服务契约和Unit底层单元如下图: 越是底层的测试,运行速度越快,时间开销越少,金…

【零参考GAN:Pansharpening】

ZeRGAN: Zero-Reference GAN for Fusion of Multispectral and Panchromatic Images (用于多光谱和全色图像融合的零参考GAN) 本文提出了一种融合低空间分辨率多光谱(LR MS)和高空间分辨率全色(PAN)图像的新的全色锐化方法–零参考生成对抗网络(ZeRGAN…

(一)、ts 基础类型 及class类举例字符雨和实现vue的挂在#app

文章目录 前言环境执行依赖node.js一、基础数据类型二、任意类型三、接口和对象类型四、 数组类型五、函数重载六、类型断言断言联合类型交叉类型 七、内置对象-Promise基础对象DOM和BOMPromise ts化代码雨案例 八、Class类(派生类和抽象类)派生类 abstract抽象类 classClass简…

自定义SpringBoot启动图标

在SpringBoot项目的resources目录下创建banner.txt文件 在https://www.bootschool.net/网站上复制Ascll艺术字(图)粘贴到banner.txt中保存。 启动项目就会加载 可以修改颜色,和版本号 ${application.version} 输出版本 ${spring-boot.v…

「软件设计师」 2023年上半年上午真题解析

「软件设计师」 2023年上半年上午真题解析 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 &…

8. 一文快速学懂常用工具——Linux命令(上)

本章讲解知识点 引言 指令学习 本专栏适合于软件开发刚入职的学生或人士,有一定的编程基础,帮助大家快速掌握工作中必会的工具和指令。本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。如专栏内容有错漏,欢迎在评论区指…

Debug技巧-不启用前端访问后端

在日常开发中,我们经常会遇到各种问题需要调试,前后端都启动需要耗费一定的时间和内存,方便起见,可以直接用抓包数据访问后端,这里我们需要用到Postman或者ApiFox 抓包数据 在系统前台触发后端请求,在控制…

MyBatis入门

MyBatis是一款优秀的持久层框架,用于简化JDBC开发 持久层: 负责将数据保存到数据库的那一层代码 我们会将操作数据库的Java代码作为持久层,而MyBatis就是对jdbc代码进行了封装。 JavaEE三层架构:表现层、业务层、持久层 框架&…

mysql之索引

一、索引的概念 1、索引:是一个排序的列表,列表当中存储的是索引的值和包含之值的数据所在行的物理地址 2、主要作用:快速查找,加快查询速度 3、索引的缺点:索引也占用额外的磁盘 (1)innodb…

Stable Diffusion WebUI扩展openpose-editor如何使用

先上地址: GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webuiOpenpose Editor for AUTOMATIC1111s stable-diffusion-webui - GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webu…

[SpringCloud | Linux] CentOS7 部署 SpringCloud 微服务

目录 一、环境准备 1、工具准备 2、虚拟机环境 3、Docker 环境 二、项目准备 1、配置各个模块(微服务)的 Dockerfile 2、配置 docker-compose.yml 文件 3、Maven 打包 4、文件整合并传输 三、微服务部署 1、部署至 Docker 2、访问微服务 四…

nacos在linux中的安装、集群的配置、mysql生产配置

1.下载和安装 官方下载地址:https://github.com/alibaba/nacos/releases,根据自己需要的本版去下载就行 下载的是 .tar.gz 后缀的文件是linux版本的 使用tar命令解压,完成之后是一个nacos的文件夹 和windows下的文件夹目录是一样的 要启…

MICCAI2023论文多模态论文速读-1

文章目录 1.Attentive Deep Canonical Correlation Analysis for Diagnosing Alzheimer’s Disease Using Multimodal Imaging Genetics2.Bidirectional Mapping with Contrastive Learning on Multimodal Neuroimaging Data3.CoLa-Diff: Conditional Latent Diffusion Model f…

【算法练习Day35】01背包问题分割等和子集

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 01背包问题分割等和子集总结…

Proteus仿真--基于51单片机的按键控制LED仿真(仿真文件+程序)

本文主要介绍基于51单片机的按键控制LED仿真(完整仿真源文件及代码见文末链接) 本仿真文件主要涉及4个按键,其中: K1按键的逻辑是——逐个点亮 K2按键的逻辑是——上四个点亮 K3按键的逻辑是——下四个点亮 K4按键的逻辑是——关…

HarmonyOS鸿蒙原生应用开发设计- 元服务(原子化服务)图标

HarmonyOS设计文档中,为大家提供了独特的元服务图标,开发者可以根据需要直接引用。 开发者直接使用官方提供的元服务图标内容,既可以符合HarmonyOS原生应用的开发上架运营规范,又可以防止使用别人的元服务图标侵权意外情况等&…