【深度学习】深度卷积神经网络(AlexNet)

在 LeNet 提出后,卷积神经网络在计算机视觉和机器学习领域中很有名气,但并未起到主导作用。

这是因为 LeNet 在更大、更真实的数据集上训练的性能和可行性还有待研究。

事实上,在 20 世纪 90 年代到 2012 年之间的大部分时间里,神经网络往往被其他机器学习方法超越,如支持向量机。

在计算机视觉中,直接将神经网络与其他机器学习方法比较也许不太公平,因为卷积神经网络的输入是由原始像素值或是经过简单预处理的像素值组成。

而在使用传统机器学习方法时,从业者永远不会将原始像素作为输入。

在传统机器学习方法中,计算机视觉流水线是由经过人的精心设计的特征流水线组成的。

与训练端到端(从像素到分类结果)系统相比,经典机器学习的流水线看起来更像下面这样:

  1. 获取一个有趣的数据集(早期收集数据需要昂贵的传感器)。
  2. 根据光学、几何学及其他偶然发现,手工对特征数据集进行预处理。
  3. 通过标准的特征提取算法,如 SIFT(尺度不变特征变换)和 SURF(加速鲁棒特征)。
  4. 将提取的特征送入分类器中,以训练分类器。

对于机器学习研究人员来说,用优雅的理论去证明各种模型的性质是重要且美丽的;而对计算机视觉研究人员来说,推动领域进步的是数据特征,而不是学习算法。

计算机视觉研究人员相信,从对最终模型精度的影响来说,更大或更干净的数据集、或是稍微改进的特征提取,比任何学习算法带来的进步大得多。

一、学习表征

在 2012 年以前,图像特征都是机械地计算出来的。在当时,设计一套新的特征函数、改进结果,并撰写论文是主流。

另有一些研究人员有不同的想法,他们认为特征本身就应该被学习。

此外,他们还认为,在合理的复杂性前提下,特征应该由多个共同学习的神经网络层组成,每个层都有可学习的参数。

在机器视觉中,最底层可能检测边缘、颜色和纹理。由 Alex 等人(2012)提出的新的卷积神经网络变体 AlexNet 的最底层就学习到了一些类似于传统滤波器的特征抽取器。

AlexNet 的更高层建立在这些底层表示的基础上,表示出更大的特征,如眼睛、鼻子等等。

而更高的层可以检测整个物体,如人、飞机等等。最终的隐藏神经元可以学习图像的综合表示,从而使得属于不同类别的数据易于区分。

尽管一直有一群执着的研究者不断钻研,试图学习视觉数据的逐级表征,但很长一段时间都未能有所突破。

深度卷积神经网络的突破出现在 2012 年,可归因于两个因素:数据和硬件。

数据

包含许多特征的深度模型需要大量的有标签数据,才能显著优于基于凸优化的传统方法。

然而,限于早期计算机有限的存储和 90 年代有限的研究预算,大部分研究只基于小的公开数据集。

这一状况在 2010 年前后兴起的大数据浪潮中得到改善。2009 年,ImageNet 数据集发布,并发起 ImageNet 挑战赛,其推动了计算机视觉和机器学习研究的发展。

硬件

深度学习对计算资源的要求很高,训练可能需要数百个迭代轮数,每次迭代都需要通过代价高昂的许多线性代数层传递数据。

然而,用 GPU 训练神经网络改变了这一格局。图形处理器(Graphics Processing Unit, GPU)早年用来加速图形处理,使电脑游戏玩家受益。

GPU 可优化高吞吐量的 4$\times$4 矩阵和向量乘法,从而服务于基本的图形任务。幸运的是,这些数学运算与卷积层的计算惊人地相似。

相比于 CPU,GPU 的综合性能更强,内核也要简单得多,因此 GPU 更加节能。此外,深度学习的许多操作需要较高的内存带宽,而 GPU 拥有 10 倍于 CPU 的带宽。

回到 2012 年的重大突破,Alex 等人意识到卷积神经网络中的计算瓶颈:卷积和矩阵乘法,都是可以在硬件上并行化的操作。于是,他们使用 GPU 加快了卷积运算,推动了深度学习热潮。

二、AlexNet

2012 年,AlexNet 横空出世。它首次证明了学习到的特征可以超越手工设计的特征,一举打破了计算机视觉研究的现状。

AlexNet 使用了 8 层卷积神经网络,其架构和 LeNet 非常相似,如下图所示。

从 LeNet(左)到 AlexNet(右)

尽管它们的设计理念非常相似,但也存在显著差异:

  1. AlexNet 相较于 LeNet-5 要深得多,其由 8 层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。
  2. AlexNet 使用 ReLU 而不是 sigmoid 作为激活函数。

模型设计

在 AlexNet 的第一层,卷积窗口的形状是 11$\times$11,比 LeNet 中大得多。

这是因为 ImageNet 中使用的图像要比 MNIST 大得多,因此需要一个更大的卷积窗口来捕获目标。

第二层中的卷积窗口缩减为 5$\times 5 ,然后是 3 5,然后是 3 5,然后是3\times 3 ,在第一层、第二层和第五层卷积层后,加入窗口形状为 3 3,在第一层、第二层和第五层卷积层后,加入窗口形状为 3 3,在第一层、第二层和第五层卷积层后,加入窗口形状为3\times$3、步幅为 2 的最大汇聚层。而且,AlexNet 的通道数是 LeNet 的 10 倍。

AlexNet 将 sigmoid 激活函数改为更简单的 ReLU 激活函数。一方面,ReLU 激活函数的计算更为简单;另一方面,当使用不同的参数初始化方法时,ReLU 激活函数使训练模型更加容易。

容量控制和预处理

AlexNet 通过暂退法(Dropout)控制全连接层的模型复杂度,而 LeNet 只使用了权重衰减。

为了进一步扩充数据,AlexNet 在训练时增加了大量的图像增强数据,如翻转、裁切和变色。这使得模型更加健壮,更大的样本量有效地减少了过拟合。

net = nn.Sequential(                     # 定义模型
        # 这里使用一个11*11的更大窗口来捕捉对象。
        # 同时,步幅为4,以减少输出的高度和宽度。
        # 另外,输出通道的数目远大于LeNet
        nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),
        nn.MaxPool2d(kernel_size=3, stride=2),
        # 减小卷积窗口,使用填充为2来使得输入与输出的高和宽一致,且增大输出通道数
        nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),
        nn.MaxPool2d(kernel_size=3, stride=2),
        # 使用三个连续的卷积层和较小的卷积窗口。
        # 除了最后的卷积层,输出通道的数量进一步增加。
        # 在前两个卷积层之后,汇聚层不用于减少输入的高度和宽度
        nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),
        nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),
        nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),
        nn.MaxPool2d(kernel_size=3, stride=2),
        nn.Flatten(),
        # 这里,全连接层的输出数量是LeNet中的好几倍。使用dropout层来减轻过拟合,暂退概率0.5
        nn.Linear(6400, 4096), nn.ReLU(),
        nn.Dropout(p=0.5),
        nn.Linear(4096, 4096), nn.ReLU(),
        nn.Dropout(p=0.5),
        # 最后是输出层。由于这里使用Fashion-MNIST,所以用类别数为10,而非论文中的1000
        nn.Linear(4096, 10))

数据集准备

即使在现代 GPU 上,使用 ImageNet 数据集训练也需要数小时或数天的时间,因此我们继续使用 Fashion-MNIST 数据集来实现 AlexNet 模型。

但由于 Fashion-MNIST 数据集中的图像(28$\times 28 )远低于 I m a g e N e t 图像,为了有效使用 A l e x N e t 架构,我们把图像 r e s i z e 变换为 224 28)远低于 ImageNet 图像,为了有效使用 AlexNet 架构,我们把图像 resize 变换为 224 28)远低于ImageNet图像,为了有效使用AlexNet架构,我们把图像resize变换为224\times$224。

模型训练

定义好模型以及变换数据集后,训练的代码和前面 LeNet 几乎一样,不过这里采用的是小学习率(0.01)和小batch_size(128)。

LeNet 模型训练的代码上次忘了放了,放到这篇文章附件里。

这次输入的图像增大很多,导致训练时间久了不少,我的拯救者风扇响个不停。第 10 轮训练后的相关结果为:

10轮的训练损失为0.32810轮的训练精度为0.87910轮的测试集精度为0.885

可以看到精度已经很接近 90%,相比 LeNet 有一定提高,这得益于 Dropout、ReLU 的使用和预处理。

尽管 AlexNet 的代码仅比 LeNet 多几行,但这中间跨越的时间却有 20 来年。目前 AlexNet 已经被很多更有效的架构超越,但它是从浅层网络到深层网络的关键一步。

LeNet 与 AlexNet 模型训练的代码见附件:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

时间技能物品竞品抢拍拍卖发布h5公众号小程序开源版开发

时间技能物品竞品抢拍拍卖发布h5公众号小程序开源版开发 利用新型营销方式,将闲置的物品通过拍卖,让价格一提再提让用户趣在其中,营造一种不一样的购物体验! 拍卖列表页 列表页采用多分类,广告轮播及流动公告和拍卖商品列表组成…

神经网络(二):卷积神经网络

文章目录 一、图像的本质1.1单通道图像:灰度图1.2多通道图像 二、卷积神经网络2.1基本结构2.2卷积层2.2.1卷积操作2.2.2填充padding2.2.3步幅strides2.2.4多通道图像卷积:单卷积核2.2.5多通道图像卷积:多卷积核2.2.5卷积层的参数与激活函数 2…

【qt】QQ仿真项目1

一览全局: QQ仿真项目 一.创建项目添加资源文件二.创建数据库三.自定义标题栏Qt类四.加载样式表标题栏按钮的搭配五.标题栏实现移动窗体六.标题栏按钮连接信号槽七.标题栏双击最大化和还原八.基类窗口实现标题栏按钮信号九.重写基类窗口绘图事件确保设置样式表生效十.用户登录界…

Leetcode 1235. 规划兼职工作

1.题目基本信息 1.1.题目描述 你打算利用空闲时间来做兼职工作赚些零花钱。 这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。 给你一份兼职工作表,包含开始时间 startTime,结束时…

第二十节:学习Redis缓存数据库实现增删改查(自学Spring boot 3.x的第五天)

这节记录下如何使用redis缓存数据库。 第一步: 先在服务器端安装redis, 下载地址:Releases tporadowski/redis GitHub。 第二步: 安装redis客户端可视化管理软件redisDesktopmanager Redis Desktop Manager - Download 第…

革命题材网络电影《突进夹金山》将于10月上线

“长征万里险,最忆夹金山”。这座雪山不仅见证了红军战士们的英勇与牺牲,也成为了中国革命历史上的一座重要里程碑。 革命题材网络电影《突进夹金山》,作为四川省2024年度重点影视剧项目以及纪念红军长征90周年献礼的红色作品,由谢…

SPI驱动学习七(SPI_Slave_Mode驱动程序框架)

目录 一、SPI_Slave_Mode驱动程序框架1. Master和Slave模式差别1.1 主设备 (Master)1.2 从设备 (Slave)1.3 示例 2. SPI传输概述2.1 数据组织方式2.2 SPI控制器数据结构 3. SPI Slave Mode数据传输过程4. 如何编写程序4.1 设备树4.2 内核相关4.3 简单的示例代码4.3.1 master和s…

DarkLabel2.4版本导入MOT17数据集

目录 背景导入效果MOT17数据集说明DarkLabel导入视频导入gt文件 背景 做目标追踪,目前找了一圈开源工具,发现DarkLabel还是很好用的,提供自动目标跟踪,标注很方便。 由于目标追踪我用的是bytetrack,官网是用mot17数据…

python爬虫案例——抓取链家租房信息(8)

文章目录 1、任务目标2、分析网页3、编写代码1、任务目标 目标站点:链家租房版块(https://bj.lianjia.com/zufang/) 要求:抓取该链接下前5页所有的租房信息,包括:标题、详情信息、详情链接、价格 如: 2、分析网页 用浏览器打开链接,按F12或右键检查,进入开发者模式;因…

5.MySQL表的约束

目录 表的约束空属性(非空约束)默认值(default约束)列描述(comment)zerofill主键(primary key约束)自增长(auto_increment)唯一键(unique约束&…

数据集-目标检测系列-鲨鱼检测数据集 shark >> DataBall

数据集-目标检测系列-鲨鱼检测数据集 shark >> DataBall 数据集-目标检测系列-鲨鱼检测数据集 shark 数据量:6k 数据样例项目地址: gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview github: https://github.com/Te…

开启争对目标检测的100类数据集-信息收集

DataBall 助力快速掌握数据集的信息和使用方式。 目标检测项目数据集样例地址: gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview github: https://github.com/TechLinkX/DataBall-detections-100s 请关注我们的专栏:DataBal…

Excel 绝对值怎么求?ABS 函数用法详解

大家好,这里是效率办公指南! 📊 ABS函数在Excel中用于计算数值的绝对值,这在处理财务、科学和日常办公等领域的数据时非常有用。今天,我们将通过一些具体的日常工作案例,来展示ABS函数的实际应用。 ABS函…

《深度学习》自然语言处理 统计、神经语言模型 结构、推导解析

目录 一、语言转换方法 1、如何将语言转换为模型可以直接识别的内容 1)数据预处理 2)特征提取 3)模型输入 4)模型推理 二、语言模型 1、统计语言模型 1) 案例: • 运行结果: • 稀疏…

BAAI 团队发布多模态模型 Emu3

在人工智能的浩瀚海洋中,一艘名为Emu3的创新之船正在破浪前行,为我们展示了多模态AI的无限可能。这个由Meta AI研究团队开发的革命性模型,通过简单而巧妙的"下一步预测"机制,实现了文本、图像和视频的统一处理。 Emu3的…

linux服务器部署filebeat

# 下载filebeat curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.23-linux-x86_64.tar.gz # 解压 tar xzvf filebeat-7.17.23-linux-x86_64.tar.gz# 所在位置(自定义) /opt/filebeat-7.17.23-linux-x86_64/filebeat.ym…

k8s StorageClass 存储类

文章目录 一、概述1、StorageClass 对象定义2、StorageClass YAML 示例 二、StorageClass 字段1、provisioner(存储制备器)1.1、内置制备器1.2、第三方制备器 2、reclaimPolicy(回收策略)3、allowVolumeExpansion(允许…

探索基于知识图谱和 ChatGPT 结合制造服务推荐前沿

0.概述 论文地址:https://arxiv.org/abs/2404.06571 本研究探讨了制造系统集成商如何构建知识图谱来识别新的制造合作伙伴,并通过供应链多样化来降低风险。它提出了一种使用制造服务知识图谱(MSKG)提高 ChatGPT 响应准确性和完整…

告别背锅侠!29个空场景及测试方法的实战指南

想必大家在日常的测试工作中,经常会碰到以下这些场景: 场景一: 测试人员:有一个数据为空的场景还没有验证。 研发人员:这个场景不会出现,因为没有删除逻辑。 场景二: 研发人员:…

蓝桥杯模块二:数码管的静态、动态实现

模块二训练 1.静态显示 一、数码管电路图 二、电路分析 1.数码管电路分析 端口分公共端和段码,先用公共端控制一个数码管,再用段码实现显示数字。共阳数码管公共端输入高电平,段码输入低电平实现点亮 2.锁存器 Y7控制段码,Y6控…