吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.1-2.2

目录

  • 第四门课 卷积神经网络(Convolutional Neural Networks)
    • 第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)
      • 2.1 为什么要进行实例探究?(Why look at case studies?)
      • 2.2 经典网络(Classic networks)

第四门课 卷积神经网络(Convolutional Neural Networks)

第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)

2.1 为什么要进行实例探究?(Why look at case studies?)

这周我们首先来看看一些卷积神经网络的实例分析,为什么要看这些实例分析呢?上周我们讲了基本构建,比如卷积层、池化层以及全连接层这些组件。事实上,过去几年计算机视觉研究中的大量研究都集中在如何把这些基本构件组合起来,形成有效的卷积神经网络。最直观的方式之一就是去看一些案例,就像很多人通过看别人的代码来学习编程一样,通过研究别人构建有效组件的案例是个不错的办法。实际上在计算机视觉任务中表现良好的神经网络框架往往也适用于其它任务,也许你的任务也不例外。也就是说,如果有人已经训练或者计算出擅长识别猫、狗、人的神经网络或者神经网络框架,而你的计算机视觉识别任务是构建一个自动驾驶汽车,你完全可以借鉴别人的神经网络框架来解决自己的问题。

最后,学完这几节课,你应该可以读一些计算机视觉方面的研究论文了,我希望这也是你学习本课程的收获。当然,读论文并不是必须的,但是我希望当你发现你可以读懂一些计算机视觉方面的研究论文或研讨会内容时会有一种满足感。言归正传,我们进入主题。这是后面几节课的提纲,首先我们来看几个经典的网络。

在这里插入图片描述
LeNet-5 网络,我记得应该是 1980 年代的,经常被引用的 AlexNet,还有 VGG 网络。这些都是非常有效的神经网络范例,当中的一些思路为现代计算机视觉技术的发展奠定了基础。论文中的这些想法可能对你大有裨益,对你的工作也可能有所帮助。

然后是 ResNet,又称残差网络。神经网络正在不断加深,对此你可能有所了解。ResNet神经网络训练了一个深达 152 层的神经网络,并且在如何有效训练方面,总结出了一些有趣的想法和窍门。课程最后,我们还会讲一个 Inception 神经网络的实例分析。

了解了这些神经网络,我相信你会对如何构建有效的卷积神经网络更有感觉。即使计算机视觉并不是你的主要方向,但我相信你会从 ResNet 和 Inception 网络这样的实例中找到一些不错的想法。这里面有很多思路都是多学科融合的产物。总之,即便你不打算构建计算机
视觉应用程序,试着从中发现一些有趣的思路,对你的工作也会有所帮助。

2.2 经典网络(Classic networks)

这节课,我们来学习几个经典的神经网络结构,分别是 LeNet-5、AlexNet 和 VGGNet,开始吧。

首先看看 LeNet-5 的网络结构,假设你有一张 32×32×1 的图片,LeNet-5 可以识别图中的手写数字,比如像这样手写数字 7。LeNet-5 是针对灰度图片训练的,所以图片的大小只有 32×32×1。实际上 LeNet-5 的结构和我们上周讲的最后一个范例非常相似,使用 6 个 5×5的过滤器,步幅为 1。由于使用了 6 个过滤器,步幅为 1,padding 为 0,输出结果为 28×28×6,图像尺寸从 32×32 缩小到 28×28。然后进行池化操作,在这篇论文写成的那个年代,人们更喜欢使用平均池化,而现在我们可能用最大池化更多一些。在这个例子中,我们进行平均池化,过滤器的宽度为 2,步幅为 2,图像的尺寸,高度和宽度都缩小了 2 倍,输出结果是一个 14×14×6 的图像。我觉得这张图片应该不是完全按照比例绘制的,如果严格按照比例绘制,新图像的尺寸应该刚好是原图像的一半。

在这里插入图片描述

接下来是卷积层,我们用一组 16 个 5×5 的过滤器,新的输出结果有 16 个通道。LeNet-5 的论文是在 1998 年撰写的,当时人们并不使用 padding,或者总是使用 valid 卷积,这就是为什么每进行一次卷积,图像的高度和宽度都会缩小,所以这个图像从 14 到 14 缩小到了
10×10。然后又是池化层,高度和宽度再缩小一半,输出一个 5×5×16 的图像。将所有数字相乘,乘积是 400。

下一层是全连接层,在全连接层中,有 400 个节点,每个节点有 120 个神经元,这里已经有了一个全连接层。但有时还会从这 400 个节点中抽取一部分节点构建另一个全连接层,就像这样,有 2 个全连接层。

最后一步就是利用这 84 个特征得到最后的输出,我们还可以在这里再加一个节点用来预测 y ^ \hat{y} y^的值, y ^ \hat{y} y^有 10 个可能的值,对应识别 0-9 这 10 个数字。在现在的版本中则使用 softmax函数输出十种分类结果,而在当时,LeNet-5 网络在输出层使用了另外一种,现在已经很少用到的分类器。

相比现代版本,这里得到的神经网络会小一些,只有约 6 万个参数。而现在,我们经常看到含有一千万到一亿个参数的神经网络,比这大 1000 倍的神经网络也不在少数。

不管怎样,如果我们从左往右看,随着网络越来越深,图像的高度和宽度在缩小,从最初的 32×32 缩小到 28×28,再到 14×14、10×10,最后只有 5×5。与此同时,随着网络层次的加深,通道数量一直在增加,从 1 增加到 6 个,再到 16 个。

在这里插入图片描述
这个神经网络中还有一种模式至今仍然经常用到,就是一个或多个卷积层后面跟着一个池化层,然后又是若干个卷积层再接一个池化层,然后是全连接层,最后是输出,这种排列方式很常用。

对于那些想尝试阅读论文的同学,我再补充几点。接下来的部分主要针对那些打算阅读经典论文的同学,所以会更加深入。这些内容你完全可以跳过,算是对神经网络历史的一种回顾吧,听不懂也不要紧。

读到这篇经典论文时,你会发现,过去,人们使用 sigmoid 函数和 tanh 函数,而不是ReLu 函数,这篇论文中使用的正是 sigmoid 函数和 tanh 函数。这种网络结构的特别之处还在于,各网络层之间是有关联的,这在今天看来显得很有趣。

比如说,你有一个𝑛𝐻 × 𝑛𝑊 × 𝑛𝐶的网络,有𝑛𝐶个通道,使用尺寸为𝑓 × 𝑓 × 𝑛𝐶的过滤器,每个过滤器的通道数和它上一层的通道数相同。这是由于在当时,计算机的运行速度非常慢,为了减少计算量和参数,经典的 LeNet-5 网络使用了非常复杂的计算方式,每个过滤器都采用和输入模块一样的通道数量。论文中提到的这些复杂细节,现在一般都不用了。

我认为当时所进行的最后一步其实到现在也还没有真正完成,就是经典的 LeNet-5 网络在池化后进行了非线性函数处理,在这个例子中,池化层之后使用了 sigmoid 函数。如果你真的去读这篇论文,这会是最难理解的部分之一,我们会在后面的课程中讲到。

下面要讲的网络结构简单一些,幻灯片的大部分类容来自于原文的第二段和第三段,原文的后几段介绍了另外一种思路。文中提到的这种图形变形网络如今并没有得到广泛应用,所以在读这篇论文的时候,我建议精读第二段,这段重点介绍了这种网络结构。泛读第三段,这里面主要是一些有趣的实验结果。

我要举例说明的第二种神经网络是 AlexNet,是以论文的第一作者 Alex Krizhevsky 的名字命名的,另外两位合著者是 Ilya Sutskever 和 Geoffery Hinton。

在这里插入图片描述
AlexNet首先用一张227×227×3的图片作为输入,实际上原文中使用的图像是224×224×3,但是如果你尝试去推导一下,你会发现 227×227 这个尺寸更好一些。第一层我们使用 96 个11×11 的过滤器,步幅为 4,由于步幅是 4,因此尺寸缩小到 55×55,缩小了 4 倍左右。然后
用一个 3×3 的过滤器构建最大池化层,𝑓 = 3,步幅𝑠为 2,卷积层尺寸缩小为 27×27×96。接着再执行一个 5×5 的卷积,padding 之后,输出是 27×27×276。然后再次进行最大池化,尺寸缩小到 13×13。再执行一次 same 卷积,相同的 padding,得到的结果是 13×13×384,384
个过滤器。再做一次 same 卷积,就像这样。再做一次同样的操作,最后再进行一次最大池化,尺寸缩小到 6×6×256。6×6×256 等于 9216,将其展开为 9216 个单元,然后是一些全连接层。最后使用 softmax 函数输出识别的结果,看它究竟是 1000 个可能的对象中的哪一个。

实际上,这种神经网络与 LeNet 有很多相似之处,不过 AlexNet 要大得多。正如前面讲到的 LeNet 或 LeNet-5 大约有 6 万个参数,而 AlexNet 包含约 6000 万个参数。当用于训练图像和数据集时,AlexNet 能够处理非常相似的基本构造模块,这些模块往往包含着大量的隐
藏单元或数据,这一点 AlexNet 表现出色。AlexNet 比 LeNet 表现更为出色的另一个原因是它使用了 ReLu 激活函数。

在这里插入图片描述
同样的,我还会讲一些比较深奥的内容,如果你并不打算阅读论文,不听也没有关系。第一点,在写这篇论文的时候,GPU 的处理速度还比较慢,所以 AlexNet 采用了非常复杂的方法在两个 GPU 上进行训练。大致原理是,这些层分别拆分到两个不同的 GPU 上,同时还专门有一个方法用于两个 GPU 进行交流。

在这里插入图片描述
论文还提到,经典的 AlexNet 结构还有另一种类型的层,叫作“局部响应归一化层”(Local Response Normalization),即 LRN 层,这类层应用得并不多,所以我并没有专门讲。局部响应归一层的基本思路是,假如这是网络的一块,比如是 13×13×256,LRN 要做的就是选取一
个位置,比如说这样一个位置,从这个位置穿过整个通道,能得到 256 个数字,并进行归一化。进行局部响应归一化的动机是,对于这张 13×13 的图像中的每个位置来说,我们可能并不需要太多的高激活神经元。但是后来,很多研究者发现 LRN 起不到太大作用,这应该是被
我划掉的内容之一,因为并不重要,而且我们现在并不用 LRN 来训练网络。

如果你对深度学习的历史感兴趣的话,我认为在 AlexNet 之前,深度学习已经在语音识别和其它几个领域获得了一些关注,但正是通过这篇论文,计算机视觉群体开始重视深度学习,并确信深度学习可以应用于计算机视觉领域。此后,深度学习在计算机视觉及其它领域的影响力与日俱增。如果你并不打算阅读这方面的论文,其实可以不用学习这节课。但如果你想读懂一些相关的论文,这是比较好理解的一篇,学起来会容易一些。AlexNet 网络结构看起来相对复杂,包含大量超参数,这些数字(55×55×96、27×27×96、27×27×256……)都是 Alex Krizhevsky 及其合著者不得不给出的。

在这里插入图片描述
这节课要讲的第三个,也是最后一个范例是 VGG,也叫作 VGG-16 网络。值得注意的一点是,VGG-16 网络没有那么多超参数,这是一种只需要专注于构建卷积层的简单网络。首先用 3×3,步幅为 1 的过滤器构建卷积层,padding 参数为 same 卷积中的参数。然后用一个2×2,步幅为 2 的过滤器构建最大池化层。因此 VGG 网络的一大优点是它确实简化了神经网络结构,下面我们具体讲讲这种网络结构。

在这里插入图片描述
假设要识别这个图像,在最开始的两层用 64 个 3×3 的过滤器对输入图像进行卷积,输出结果是 224×224×64,因为使用了 same 卷积,通道数量也一样。VGG-16 其实是一个很深的网络,这里我并没有把所有卷积层都画出来。

在这里插入图片描述

假设这个小图是我们的输入图像,尺寸是 224×224×3,进行第一个卷积之后得到224×224×64 的特征图,接着还有一层 224×224×64,得到这样 2 个厚度为 64 的卷积层,意味着我们用64个过滤器进行了两次卷积。正如我在前面提到的,这里采用的都是大小为3×3,步幅为 1 的过滤器,并且都是采用 same 卷积,所以我就不再把所有的层都画出来了,只用一串数字代表这些网络。

接下来创建一个池化层,池化层将输入图像进行压缩,从 224×224×64 缩小到多少呢?没错,减少到 112×112×64。然后又是若干个卷积层,使用 129 个过滤器,以及一些 same 卷积,我们看看输出什么结果,112×112×128.然后进行池化,可以推导出池化后的结果是这样
(56×56×128)。接着再用 256 个相同的过滤器进行三次卷积操作,然后再池化,然后再卷积三次,再池化。如此进行几轮操作后,将最后得到的 7×7×512 的特征图进行全连接操作,得到 4096 个单元,然后进行 softmax 激活,输出从 1000 个对象中识别的结果。

在这里插入图片描述

顺便说一下,VGG-16 的这个数字 16,就是指在这个网络中包含 16 个卷积层和全连接层。确实是个很大的网络,总共包含约 1.38 亿个参数,即便以现在的标准来看都算是非常大的网络。但 VGG-16 的结构并不复杂,这点非常吸引人,而且这种网络结构很规整,都是几个卷积层后面跟着可以压缩图像大小的池化层,池化层缩小图像的高度和宽度。同时,卷积层的过滤器数量变化存在一定的规律,由 64 翻倍变成 128,再到 256 和 512。作者可能认为 512 已经足够大了,所以后面的层就不再翻倍了。无论如何,每一步都进行翻倍,或者说在每一组卷积层进行过滤器翻倍操作,正是设计此种网络结构的另一个简单原则。这种相对一致的网络结构对研究者很有吸引力,而它的主要缺点是需要训练的特征数量非常巨大。

在这里插入图片描述

有些文章还介绍了 VGG-19 网络,它甚至比 VGG-16 还要大,如果你想了解更多细节,请参考幻灯片下方的注文,阅读由 Karen Simonyan 和 Andrew Zisserman 撰写的论文。由于VGG-16 的表现几乎和 VGG-19 不分高下,所以很多人还是会使用 VGG-16。我最喜欢它的一
点是,文中揭示了,随着网络的加深,图像的高度和宽度都在以一定的规律不断缩小,每次池化后刚好缩小一半,而通道数量在不断增加,而且刚好也是在每组卷积操作后增加一倍。也就是说,图像缩小的比例和通道数增加的比例是有规律的。从这个角度来看,这篇论文很
吸引人。

以上就是三种经典的网络结构,如果你对这些论文感兴趣,我建议从介绍 AlexNet 的论文开始,然后就是 VGG 的论文,最后是 LeNet 的论文。虽然有些晦涩难懂,但对于了解这些网络结构很有帮助。

学过这些经典的网络之后,下节课我们会学习一些更先高级更强大的神经网络结构,下节课见。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

PyTorch深度学习快速入门教程【土堆】基础知识篇

Juptyer 版本: Python 3.9.19Pytorch 2.4.1 (pytorch0) C:\Users\25694>conda install nb_conda_kernels(pytorch0) C:\Users\25694>jupyter notebook使用conda环境的pytorch: 成功解决python.exe无法找到程序入口 无法定位程序输入点 shifte…

【Python语言初识(一)】

一、python简史 1.1、python的历史 1989年圣诞节:Guido von Rossum开始写Python语言的编译器。1991年2月:第一个Python编译器(同时也是解释器)诞生,它是用C语言实现的(后面),可以调…

茶思屋直播|TinyEngine+AI:聚焦主航道,在实践中探索低代码技术黑土地

低代码引擎使能开发者定制低代码平台。它是低代码平台的底座,提供可视化搭建页面等基础能力,既可以通过线上搭配组合,也可以通过cli创建个人工程进行二次开发,实时定制出自己的低代码平台。适用于多场景的低代码平台开发&#xff…

【C++ 学习】多态的基础和原理(10)

目录 前言1. 概念2. 多态的定义及实现2.1 多态的构成条件2.2 虚函数2.3 虚函数重写2.4 虚函数重写的例外2.4.1 协变2.4.1 析构函数的重写 2.5 多态调用和普通调用2.6 函数重写/函数隐藏/函数重载 的对比2.6.1 函数重写2.6.2 函数隐藏2.6.3 函数重载 2.7 C11 final 和override 3…

领域驱动DDD三种架构-分层架构、洋葱架构、六边形架构

博主介绍: 大家好,我是想成为Super的Yuperman,互联网宇宙厂经验,17年医疗健康行业的码拉松奔跑者,曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 技术范围: 目前专注java体系,以及…

作为HR,如何考察候选人的沟通能力

如何考察候选人的沟通能力。沟通能力,这个听起来简单,实际上却是一个非常复杂的技能,它关乎到一个人能否有效地传递信息,理解他人,并且在团队中发挥积极的作用。 作为HR,我们应该怎样才能精准地把握住候选…

【Python语言初识(二)】

一、分支结构 1.1、if语句 在Python中,要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的单词,像if和else就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名(事实上,用作其他…

网络:UDP协议

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言UDP协议报头和有效载荷分离的问题有效载荷向上交付的问题,也就是交给哪个进程?怎么确定把报文收全了?UDP报头是如何封装的呢&…

mybatisplus的多记录操作 批量删除和批量查询

1.批量查询 通过in查询 Testpublic void testBatchSelectByIds(){List<Integer> ids Arrays.asList(5,7);List<User> users userMapper.selectBatchIds(ids);log.info(users);} 2.批量删除 Testpublic void testBatchDelete(){List<Integer> ids Arrays…

VM VirtualBox虚拟机装Win11提示这台电脑不符合要求,怎么解决?

环境&#xff1a; VM VirtualBox WIN11 问题描述&#xff1a; VM VirtualBox虚拟机装WIN11提示这台电脑不符合要求 解决方案&#xff1a; 1.进入这个页面 2. 跳过win11安全验证 在键盘上按 Shift F10或者FnShift F10调出命令命令提示符&#xff0c; 键入 Regedit 并…

大数据处理从零开始————3.Hadoop伪分布式和分布式搭建

1.伪分布式搭建&#xff08;不会用&#xff0c;了解就好不需要搭建&#xff09; 这里接上一节。 1.1 伪分布式集群概述 伪分布式集群就是只有⼀个服务器节点的分布式集群。在这种模式中&#xff0c;我们也是只需要⼀台机器。 但与本地模式不同&#xff0c;伪分布式采⽤了分布式…

使用Locust进行接口性能测试:关联与参数化技巧分析

Locust是一款开源的Python性能测试工具&#xff0c;它可以模拟大量并发用户对网站或者其他接口进行压力测试 1. 关联&#xff1a;精确模拟用户操作 在某些场景下&#xff0c;我们需要将之前请求的响应参数关联到后续请求中&#xff0c;以模拟用户操作。这在会话管理&#xff…

数字工厂管理系统与MES系统在实际应用中有哪些区别

随着制造业的数字化转型步伐加快&#xff0c;数字工厂管理系统与制造执行MES系统作为两大关键工具&#xff0c;在实际应用中展现出了明显的差异。本文将从实际应用的角度&#xff0c;详细探讨这两种系统之间的主要区别。 数字工厂管理系统的实际应用 数字工厂管理系统侧重于对…

python检测keycloak证书连接报错问题

最近一直被keycloak的证书问题困扰了很久&#xff0c;老是提示ssl安全连接&#xff0c;由于不会java,只好硬着头皮用python测试。 我这里的证书是自己签注的证书&#xff0c;导入系统的是CA根证书。 from keycloak import KeycloakOpenID# 1. 配置 Keycloak 客户端 keycloak_o…

STM32F407ZGT6驱动sd卡+文件夹 并写入多组实时数据 基于cubemx生成

SD卡介绍 SD卡&#xff0c;全称Secure Digital卡&#xff0c;是一种常见的便携式存储设备&#xff0c;通常用于存储和传输数据。它是一种闪存存储卡。 TF卡&#xff08;TransFlash卡&#xff09; 又称MicroSD卡&#xff0c;MicroSD卡比SD卡小&#xff0c;通常只有SD卡的1/4大小…

LLM(大语言模型)和AIGC入门学习路线图,零基础入门到精通,收藏这一篇就够了

大模型是指网络规模庞大的深度学习模型&#xff0c;其参数量通常在千亿级别。 学习大模型需要具备计算机基础&#xff0c;这一点非常重要&#xff01; 要系统地入门大模型&#xff0c;首先需要学习深度学习的基础知识&#xff0c;包括神经网络&#xff08;NN&#xff09;、卷…

nvm node管理工具常用指令

注&#xff1a;使用nvm之前需要卸载掉原有的node 1.在终端输入 nvm list available&#xff0c; 查看网络可以安装的版本。 点击visit后面的链接可查看完整版本列表 版本区别&#xff1a; CURRENT&#xff1a;当前正在使用的 Node.js 版本。LTS&#xff08;Long Term Suppor…

java踩坑

1.mybatis在idea可以正常运行&#xff0c;但是打jar包后&#xff0c;就报链接超时&#xff0c;可能是参数设置有问题&#xff0c;但是idea自动忽略了。 出问题的配置&#xff1a;&#xff08;圈出来的地方乱码了&#xff0c;idea有纠错能力&#xff0c;它自动调整为正确的&…

电脑录课软件哪个好用,提高教学效率?电脑微课录屏软件推荐

在当今这个数字化时代&#xff0c;教育领域也迎来了翻天覆地的变化。随着远程教学和在线学习的普及&#xff0c;教师们开始寻求更高效、更便捷的教学工具来提升教学质量和学生的学习体验。电脑录课软件&#xff0c;作为现代教育技术的重要组成部分&#xff0c;能够帮助教师轻松…

基于存内计算架构的模型部署与映射优化

先进计算大赛背景&#xff1a; ‘’存内计算”架构通过消除存储与计算单元间的物理距离&#xff0c;突破传统冯诺依曼架构的限制&#xff0c;自2016年起受到广泛关注&#xff0c;被视为国产算力发展的关键技术。 ​ 在存内计算架构中&#xff0c;权重布局对提高存算单元利用率…