比较LeNet、AlexNet、VGG和ResNet模型及其优缺点的实际实验。

一、说明

        卷积神经网络,有很多种类,这不仅仅是各种试验或尝试。而且是已经设计好的网络存在若干不尽人意之处,需要弥补和改进。因此,本文就是记录这些网络的优缺点,从新意上说,本文全无,但是从启发初学者还是有点意义。

非洲野生动物图像集中的几张图像

二、基础操作

2.1 实验使用的数据集

        我开始学习神经网络和 CNN 中的不同模型架构。在这里,我写了关于 4 个模型架构的文章,以及我在这 4 个模型上训练图像集时的发现。撰写本文仅用于学习目的,并更好地了解我们在这些模型中看到的改进。

        这里的所有观察结果都与一个图像集相关,不能作为模型性能的衡量标准。哪种模型最适合取决于每个用例。例如,如果您了解我的金属铸造项目,就会发现简单的 CNN 模型往往比 ResNet 模型表现得更好,而 ResNet 模型在此表现出色。

        我在实验中使用了[非洲野生动物]( https://www.kaggle.com/biancaferreira/african-wildlife )数据集。

        该数据集中有 4 个类:

  • 水牛
  • 大象
  • 犀牛
  • 斑马

2.1 本文内容

  • 什么是卷积神经网络
  • 在上述数据集上实现 4 个不同的 CNN 模型,并根据我的实验得出的推论简要介绍每个模型。
  • 结论

2.3 什么是卷积神经网络?

典型的CNN网络

  • 卷积神经网络是一种人工神经网络,主要用于图像识别应用。它由称为感知器的多层组成,用于以最详细的方式学习图像中存在的特征。
  • 这里的“卷积”代表了对图像内特征的理解。提取这些特征需要整个卷积过程。
  • 为了提取这些特征,我们使用过滤器并提及要使用的过滤器的数量(内核)。
  • 池化是 CNN 中的另一个概念。它用于减少对图像运行过滤器后获得的特征数量。与图像本身相比,过滤器使我们获得大量特征。因此,池化用于获得相同的更好的概括表示。例如,由于过滤器(内核)的数量及其形状,25x25 的图像最终可能具有 100x100 的特征。池化可以使用最大池化或均值池化来减少这些特征。我不会深入研究什么是池化。
  • 填充是另一个 CNN 概念,我们在图像的边缘添加零。这样做有两个原因。为了更好地读取边缘特征并获得与输入图像相似的输出。
  • 最后,CNN 的输出被展平并发送到全连接层。这是 CNN 的神经网络部分。它将使机器能够从提取的特征中学习并创建通用模型。

  • 要了解有关卷积神经网络的更多信息,我将从这个[视频]( https://youtu.be/aircAruvnKk )开始。

三、LeNet网

  • LeNet 架构由 Yann Lecun 于 1998 年发明,旨在能够执行光学字符识别 (OCR)。与其他架构相比,该架构非常小且简单。该图像集由 0-9 的黑白数字图像组成。
  • 它由3个卷积层和3个池化层组成。在这些层之后,输出被展平,数据被发送到全连接层。神经网络的最后一个密集层可以是用于预测输出的任何激活函数。
  • 根据 LeNet 发表的论文,在整个网络中,所有层的激活函数都是 tanh。我对该网络使用了相同的激活函数。我们必须记住,今天使用的常用激活函数在 1998 年还不存在。

2.1 在您的示例和发现中实施

LeNet 架构的损失和准确率图

  • 从上面的准确率图中可以看出,我们可以清楚地看到该模型显示的学习速度很慢。
  • 该网络缺乏深度是原因之一。
  • 另一个原因可能是使用了激活函数 tanh。

2.2 优点

  • 这个网络很好地介绍了神经网络的世界,而且非常容易理解。它非常适合字符识别图像。

2.3 缺点

  • 该模型是专门针对特定用例构建的。虽然这是 1998 年的一项重大突破,但它在处理彩色图像方面的表现却不佳。大多数图像识别问题都需要 RGB 图像才能更好地识别。
  • 由于模型不是很深,它很难扫描所有特征,从而产生性能较差的模型。如果神经网络没有从训练图像中获得足够的特征,那么模型将很难概括并创建准确的模型。

四、AlexNet 网

发表的论文中看到的 Alexnet 架构图像

  • AlexNet 架构于 2012 年在 ImageNet 大规模视觉识别挑战赛上推出。
  • 它由 Alex Krizhevsky 设计,并与 Illya Sutskever 和 Krizhevsky 的博士生导师 Geoffrey Hinton 博士一起出版。
  • AlexNet由8层组成,并使用了ReLu激活函数,这是深度学习的重大发现。它摆脱了梯度消失的问题,因为现在梯度值不再限制在一定范围内。
  • 它是第一个基于 GPU 的 CNN 模型,比以前的模型快 4 倍。

4.1 在您的示例和发现中实施

损失和准确度 AlexNet 架构

  • 我观察到,与 LeNet 相比,训练速度有所提高。我们在图中可以清楚地看到,该模型更快地实现了更好的精度。
  • 与 LeNet 相比,损失也以更快的速度减少。
  • 网络深度的增加和 ReLu 的引入对神经网络产生了重大影响。这个模型启发了未来模型的研究。

4.2 优点

  • AlexNet 是第一个使用 GPU 进行训练的主要 CNN 模型。这可以加快模型的训练速度。
  • AlexNet 是一种更深层次的 8 层架构,这意味着与 LeNet 相比,它能够更好地提取特征。它在当时的彩色图像上也很有效。
  • 该网络中使用的 ReLu 激活函数有 2 个优点。与其他激活函数不同,它不限制输出。这意味着不会有太多功能损失。
  • 它否定了梯度求和的负输出,而不是数据集本身。这意味着它将进一步提高模型训练速度,因为并非所有感知器都处于活动状态。

4.3 缺点

  • 与本文进一步使用的模型相比,该模型的深度非常小,因此很难从图像集中学习特征。
  • 我们可以看到,与未来的模型相比,需要更多的时间才能获得更高精度的结果。

五、VGG网

  • Visual Geometric Group 或 VGG 是一种 CNN 架构,在 AlexNet 两年后于 2014 年推出。引入该模型的主要原因是为了在训练图像分类/识别模型时了解深度对准确性的影响。
  • VGG 网络引入了将多个具有较小内核尺寸的卷积层分组的概念,而不是使用一个具有大内核尺寸的卷积层。这导致输出的特征数量减少,其次是包含 3 个 ReLu 层,而不是增加一个学习实例。从上图中可以看出,我们看到分层结构(灰色框),后面是池化层(红色框)。

5.1 在您的示例和发现中实施

VGG-16 架构的损耗和精度

  • 我在这里的观察是,虽然达到最大准确度所需的纪元数量有所减少,但损失需要更长的时间才能收敛到最小值。
  • VGG 中引入更多层使模型能够更好地理解图像中的特征。
  • 然而,不断学习和重新学习是 VGG 的一个问题,这就是为什么损失似乎如此不可预测(梯度爆炸)。
  • 这个问题在 ResNet 架构中得到了解决,该架构引入了残差学习的概念。

观察到 VGG-16 的验证损失

  • 验证损失往往会随着时间的推移而增加,这告诉我随着时间的推移,这个模型过度拟合了数据集。对于其他图像集,情况可能并不总是如此。

5.2 优点

  • VGG 带来了准确性的巨大提高和速度的提高。这主要是因为提高了模型的深度并引入了预训练模型。
  • 较小内核的层数增加会导致非线性增加,这对于深度学习始终是积极的。
  • VGG 带来了基于相似概念的各种架构。这为我们提供了更多选择,让我们可以选择哪种架构最适合我们的应用程序。

5.3 缺点

  • 我发现该模型的一个主要缺点是存在梯度消失问题。如果我们查看我的验证损失图,我们可以清楚地看到它呈增长趋势。其他任何型号都没有出现这种情况。ResNet 架构解决了梯度消失问题。
  • VGG 比新的 ResNet 架构慢,后者引入了残差学习的概念,这是另一个重大突破。

六、ResNet 残差网络

ResNet 中的残差学习

  • ResNet 于 2015 年推出,带来了准确性的大幅提升和速度的大幅提升。
  • VGG引入了增加层数的概念来提高精度,但是发现当我们将层数增加到超过20时,模型无法收敛到最小误差%。造成这种情况的一个主要原因是梯度消失问题。学习率变得如此之低,以至于模型的权重没有发生变化。
  • 另一个问题是梯度爆炸。这在我的 VGG 图中也可见,我的损失波动不规律。当引入批量归一化后,这个问题得到了解决,但它仍然在较小的范围内波动。
  • 为了解决这个问题,引入了残余学习的概念,该概念的灵感来自于人脑横向抑制的概念。它只是意味着大脑中的神经元能够控制其邻近神经元是否放电。
  • 残差学习可以用一个非常简单的例子来解释。最初,当我们学习骑自行车时,我们会犯错误,但我们会学习。一旦我们能够骑自行车,我们的大脑就会停止发射负责学习技能的神经元,使我们能够专注于与骑自行车有关的其他事情。

6.1 在您的示例和发现中实施

ResNet50 架构的损失和准确性

  • 我们看到在实现高精度和低损耗方面取得了巨大进步。残差学习的概念堪称神经网络的重大突破。
  • 从 ResNet 架构创建的模型还具有较低的验证损失,这意味着训练时不会发生过度拟合。

6.2 优点

  • ResNet 架构不需要在每个 epoch 中激发所有神经元。这大大减少了训练时间并提高了准确性。一旦学习了某个功能,它就不会尝试再次学习它,而是专注于学习新的功能。一种非常聪明的方法,极大地提高了模型训练性能。
  • 相同的 VGG 网络的复杂性导致了退化问题,可以通过残差学习来解决。

七、结论

        我进行此实验是为了更好地了解不同类型的 CNN 模型以及它们对图像分类模型的训练有何实际影响。您可以在我的合作笔记本上进一步探索这个实验。使用的图像来自本次kaggle比赛。

谢谢阅读!

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

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

相关文章

Java学习笔记(七)——面向对象编程(中级)

一、IDEA (一)常用的快捷键 (二)模版/自定义模版 二、包 (一)包的命名 (二)常用的包 (三)如何引入(导入)包 (四&am…

spring cloud之网关

Gateway网关(*) 什么是网关 # 1.说明 - 网关统一服务入口,可方便实现对平台众多服务接口进行管控。 - 网关 路由转发 过滤器路由转发:接收一切外界请求,转发到后端的微服务上去过滤器:在服务网关中可以完成一系列的横切功能&a…

react Antd3以下实现年份选择器 YearPicker

项目antd版本低,没有直接可使用的年份选择器,参考此篇(使用antd实现年份选择器控件 - 掘金) 一开始在state里设置了time: this.state {isopen: false,time: null } 在类似onChange事件里this.setState({time: valu…

Ubuntu 17.10 “Artful Aardvark” 发布首个 Beta

Ubuntu 17.10 “Artful Aardvark” 首个 Beta 版已发布。 按照 Ubuntu 17.10 的发布日程 ,Ubuntu 17.10 首个 beta 版按时发布了。不过参与本次测试版的没有 Ubuntu 官方风味版本(要尝试的话可以考虑每日构建 ISO),包括了 Kubunt…

Android R.fraction

来源 我是在看Android10原生代码&#xff0c;绘制状态栏蓝牙电量相关类中第一次看到R.fraction的&#xff0c;如类BatteryMeterDrawable <fraction name"battery_button_height_fraction">10%</fraction> mButtonHeightFraction context.getResources(…

使用.net 构建 Elsa Workflow

对接过蓝凌OA 也基于泛微OA数据库原型重新研发上线过产品&#xff0c;自研的开源的也上线过 每个公司对OA流程引擎介绍 都不一样的&#xff0c; 比如Elsa 这款微软MVP开源组件&#xff0c;基于跨平台开发的技术含量高&#xff0c;专门做OA的同行推过对应文章。 直接看怎么用吧。…

【机器学习】朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)

1. 朴素贝叶斯模型 对于不同的数据&#xff0c;我们有不同的朴素贝叶斯模型进行分类。 1.1 多项式模型 &#xff08;1&#xff09;如果特征是离散型数据&#xff0c;比如文本这些&#xff0c;推荐使用多项式模型来实现。该模型常用于文本分类&#xff0c;特别是单词&#xf…

开发企业微信群机器人,实现定时提醒

大家好&#xff0c;我是鱼皮&#xff0c;今天分享一个用程序解决生活工作问题的真实案例。 说来惭愧&#xff0c;事情是这样的&#xff0c;在我们公司&#xff0c;每天都要轮流安排一名员工&#xff08;当然也包括我&#xff09;去楼层中间一个很牛的饮水机那里接水。但由于大…

MySQL最新2023年面试题及答案,汇总版(7)【MySQL最新2023年面试题及答案,汇总版-第三十七刊】

文章目录 MySQL最新2023年面试题及答案&#xff0c;汇总版(7)01、NOW() 和 CURRENT_DATE() 有什么区别&#xff1f;02、CHAR和VARCHAR的区别&#xff1f;03、主键索引与唯一索引的区别&#xff1f;04、MySQL中有哪些不同的表格&#xff1f;05、SQL的生命周期&#xff1f;06、你…

Rt-Thread 移植6--多线程(KF32)

6.1 就绪列表 6.1.1 线程就绪优先级组 线程优先级表的索引对应的线程的优先级。 为了快速的找到线程在线程优先级表的插入和移出的位置&#xff0c;RT-Thread专门设计了一个线程就绪优先级组。线程就绪优先组是一个32位的整型数&#xff0c;每一个位对应一个优先级&#xff…

滚雪球学Java(63):Java高级集合之TreeSet:什么是它,为什么使用它?

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

欢迎使用Markdown编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…