模型实际训练笔记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.hqwc.cn/news/156594.html

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

相关文章

C++ Qt 学习(二):常用控件使用与界面布局

1. Qt 布局详解 ui 设计器设计界面很方便,为什么还要手写代码? 更好的控制布局更好的设置 qss代码复用 完全不会写 Qt 布局,很麻烦,怎么学会手写布局? 看 Qt 自己怎么写改良 Qt 的布局写法 1.1 水平布局 #include …

【ES专题】ElasticSearch快速入门

目录 前言从一个【搜索】说起 阅读对象阅读导航笔记正文一、全文检索1.1 什么是【全文检索】1.2 【全文检索】原理1.3 什么是倒排索引 二、ElasticSearch简介2.1 ElasticSearch介绍2.2 ElasticSearch应用场景2.3 数据库横向对比 三、ElasticSearch环境搭建3.1 Windows下安装3.2…

在Spring boot中 使用JWT和过滤器实现登录认证

在Spring boot中 使用JWT和过滤器实现登录认证 一、登录获得JWT 在navicat中运行如下sql,准备一张user表 -- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS t_user; CREATE TABLE t_user (id int(11) …

加州大学提出 PromptAgent 帮忙我们高效的使用 ChatGPT

本心、输入输出、结果 文章目录 加州大学提出 PromptAgent 帮忙我们高效的使用 ChatGPT前言加州大学团队提出了可以自动优化 Prompt 的框架 —— PromptAgentPromptAgent 原理论文 实例介绍PromptAgent 框架设计PromptAgent 的策略优化过过程PromptAgent 的结果是否具备普适性弘…

聚观早报 |2024款飞凡R7官宣;小米14新配色材质

【聚观365】10月27日消息 2024款飞凡R7官宣 小米14新配色材质 金山办公2023第三季度业绩 IBM2023第三季度业绩 新东方2024财年第一季度业绩 2024款飞凡R7官宣 飞凡汽车官宣,2024款飞凡R7将于11月上市,新车将搭载飞凡巴赫座舱,同时超过1…

有色金属冶炼VR虚拟场景互动教学有何优势

真实模拟:VR虚拟现实技术可以提供一个真实的虚拟环境,模拟钢铁制造现场,包括设备、工艺流程、操作规程等,使学员获得直观、真实的体验。 安全可靠:钢铁制造技能培训可以在虚拟环境中进行,不会对人员或设备造…

【设计模式】第17节:行为型模式之“解释器模式”

一、简介 解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。 二、适用场景 领域特定语言复杂输入解释可扩展的语言结构 三、UML类图 四、案例 对输入的特定格式的打印语句进行解析并执行。 packag…

初识webpack和打包过程

文章目录 一、path模块1.内置模块path2.path常见的API 二、webpack1.认识webpack2.脚手架依赖于webpack3.Webpack到底是什么呢?4.Vue项目加载的文件有哪些呢?5.Webpack的使用前提6.Webpack的安装7.Webpack的默认打包8.创建局部的webpack 三、webpack配置…

量子计算与量子密码(入门级-少图版)

量子计算与量子密码 写在最前面一些可能带来的有趣的知识和潜在的收获 1、Introduction导言四个特性不确定性(自由意志论)Indeterminism不确定性Uncertainty叠加原理(线性)superposition (linearity)纠缠entanglement 虚数的常见基本运算欧拉公式&#x…

密码学 - SHA-2

实验八 SHA-2 1.实验目的 熟悉SHA – 2算法的运行过程,能够使用C语言编写实现SHA-2算法程序,增加对摘要函数的理解。 2、实验任务 (1)理解SHA-2轮函数的定义和常量的定义。 (2)利用VC语言实现SHA-2算…

京东协议算法最新版

环境准备 1 com.jingdong.app.mall11.6.4 入口定位 逆向分析,发现 params 里面有一个 sign 以及请求头里面有一个 jdgs 首先我们发现京东的 sign 是 32 位的,猜测其可能是 md5 之类的 hash 算法,既然是 hash 算法,那么就大概率…

C++ 动态规划 DP教程 (一)思考过程(*/ω\*)

动态规划是一种思维方法,大家首先要做的就是接受这种思维方法,认同他,然后再去运用它解决新问题。 动态规划是用递推的思路去解决问题。 首先确定问题做一件什么事情? 对这件事情分步完成,分成很多步。 如果我们把整件…