GoogLeNet的个人理解[通俗易懂]

GoogLeNet的个人理解[通俗易懂]先附上著名的网络结构GoogLeNet及其延伸版本,以便自己日后的学习。1.Inception[V1]:GoingDeeperwithConvolutions2.Inception[V2]:BatchNormalization:AcceleratingDeepNetworkTrainingbyReducingInternalCovariateShift

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

先附上著名的网络结构GoogLeNet及其延伸版本,以便自己日后的学习。

  1. Inception[V1]: Going Deeper with Convolutions
  2. Inception[V2]: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
  3. Inception[V3]: Rethinking the Inception Architecture for Computer Vision
  4. Inception[V4]: Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

在学习了Andrew Ng 的deeplearning.ai中的CNN课程时,顺着Ng的思路去了解了GoogLeNet这篇经典论文。GoogleNet提出了一个全新的深度CNN架构——Inception,无全连接层,可以节省运算的同时,减少了很多参数,参数数量是AlexNet的1/12,数量只有5 million,而且在ImageNet竞赛中取得了很好的成绩。
  文章在引文中提到了提高深度神经网络性能最直接的方式,那就是增加网络的规模:深度和宽度。但是这样做的话肯定存在很多问题,问题是什么呢?
  问题一:网络规模更大通常意味着需要更多的参数,这会使增大的网络更容易过拟合,尤其是在训练集的标注样本有限的情况下。
  问题二:使用计算资源的显著增加。
  紧接着,文章就这两个问题开展一系列的引用与讨论,提出论文的追求,那就是设计一个好的网络拓扑,最后引出了Inception架构,并且将Inception架构的设计初衷与思想诠释的比较到位。首先,肯定卷积神经网络的重要性,以及池化对于卷积效果的重要性,所以Inception架构的基础是CNN卷积操作。而就减小网络规模这一点来说,新的模型需要考虑一个新的网络架构,从如何近似卷积视觉网络的最优稀疏结构出发,进行探索与讨论。

Inception架构

我们来具体看Inception的架构(图1)。在这篇文章的Inception版本1中,创新点在于一层网络中存在多个不同尺度的卷积核,摒弃了AlexNet、VGG等传统著名网络的“一条线”架构。升级版的Inception,也就是这篇文章提到的Inception架构中,加入多个1×1的“瓶颈”层,来保留空间维度, 降低深度,在池化之后采用1×1卷积核来减少池化后的深度,从而主要达到减小规模的目的。
  我简单的进行了两个版本Inception的操作数运算,步骤如下:


GoogLeNet的个人理解[通俗易懂]
  如果采用(a)的架构,假设在这一个Inception架构中,上一层输入的尺寸大小是28×28×256,采用1×1,3×3,5×5三种不同尺度的卷积核和3×3的max池化来进行该层的计算输出,那么在该层中卷积操作的ops次数计算如下:

			[1×1 conv,128] 28×28×128×1×1×256
			[3×3 conv,192] 28×28×192×3×3×256
			[5×5 conv,192] 28×28×96×5×5×256

Total:854M ops。对于[1×1 conv,128],28×28×128×1×1×256的计算是怎么来的呢?首先对于输入尺寸为28×28×256的矩阵来说,1×1卷积核实际大小是:1×1×256,每进行一次卷积,就进行了1×1×256次运算,那么一个卷积核需要进行28×28次卷积,而一共有128个不同的1×1卷积核,所以总的运算次数为28×28×1×1×256×128。


GoogLeNet的个人理解[通俗易懂]
  如果采用(b)的架构,同样假设在这一个Inception架构中,上一层输入的尺寸大小是28×28×256,采用1×1,3×3,5×5三种不同尺度的卷积核和3×3的max池化来进行该层的计算输出,但是在进行以上卷积之前,在3×3和5×5卷积操作的前一步,加入1×1的“瓶颈”层,来保留空间维度, 降低深度;在池化之后采用1×1卷积核来减少池化后的深度。那么在该层中卷积操作的ops次数计算如下:

			[1×1 conv,64] 28×28×64×1×1×256
			[3×3 conv,64] 28×28×64×1×1×256
			[5×5 conv,128] 28×28×128×1×1×256
			[1×1 conv,192] 28×28×192×3×3×64
			[3×3 conv,96] 28×28×96×5×5×64
			[5×5 conv,64] 28×28×64×1×1×256

Total:358M ops。可以看到,虽然网络的复杂程度加大了,但是总的运算次数减小到之前的1/3。
  Inception网络是一个由上述类型的模块互相堆叠组成的网络,从而形成了GoogLeNet。GoogLeNet是一个具有22层网络的深度学习架构,当然这22层指的是拥有权重的层,如图所示GoogLeNet的整体架构。


GoogLeNet的个人理解[通俗易懂]
  在中间层采用辅助分类器(Auxiliary Classification),增加了两个Loss来保证梯度回传消失的情况,这种设计结构用来减少梯度消失,ResNet是减少梯度爆炸。从中我们可以学习到一个点在于:梯度消失解决办法可以是在中间增加额外信号。

创新点

GoogLeNet的创新点都是围绕减少深度和提高性能来设计的。

  1. 借鉴NiN(Network in Network)中提出的思想,采用1×1 conv 来保持空间维度的同时,降低深度,也就是降低通道数量,同时1×1 conv还可以为你的网络增强非线性。
  2. 横向的卷积核排列设计,使得多个不同size的卷积核能够得到图像当中不同cluster的信息 ,我们称之为“多尺度”。这样融合了不同尺度的卷积以及池化,一个模块一层就可以得到多个尺度的信息,下一阶段也可以同时从不同尺度中提取的特征,可以进行多维度特征的融合,所以效果更好。把计算力拓宽,也避免了太深训练梯度弥散的问题。
  3. 对深度相对较大的网络来说,梯度反向传播能够通过所有层的能力就会降低。文中指出:“在这个任务上,更浅网络的强大性能表明网络中部层产生的特征应该是非常有识别力的”。通过将辅助分类器添加到这些中间层,可以提高较低阶段分类器的判别力,这是在提供正则化的同时克服梯度消失问题。后面的实验表明辅助网络的影响相对较小(约0.5),只需要其中一个辅助分类器就能取得同样的效果。
  4. 较高层会捕获较高的抽象特征,其空间集中度会减少。这表明随着网络转移到更高层,Inception架构中3×3和5×5卷积的比例应该会增加。而到最后一个卷积层出来的全连接,由全局平均池化替代了,减少了参数,节约了计算量。

我的思考

Inception中为什么要加入池化呢?是因为池化操作对于目前卷积网络的成功至关重要,因此建议在每个Inception中添加一个并行池化,采用步长为2的最大池化层将网络分辨率减半,应该也应该具有额外的效果。
  论文中提到“Inception结构中所有的滤波器是学习到的”,怎么理解?其实,Inception的作用是代替人工来确定卷积层中过滤器的类型,或者确定是否需要创建卷积层或池化层。Inception网络不需要人为决定使用哪个fliter,或者是否需要池化,而是由网络自行确定(学习)这些参数,自行学习是否使用这些fliter或者池化,也就是说这些都是Hypeparameter。
  论文中提到了这样一句话:max-pooling layers result in loss of accurate spatial information,作者也意识到了最大池化会导致某些精确的空间信息丢失,但是他在这里仅仅提到了,没有去深入思考,这让我联想到了最近的一个新模型,CapsNet,神经网络提出者Hinton的新论文。其中的思想也很新颖,而且我对CapsNet能否与迁移学习相联系有着比较大的兴趣,正在尝试着跟从实验室学长去研究。

Google公司具有很多计算力超强的集群,可以反复验证各种架构设计的优越性,所以GoogleNet整体架构的最终版,也就是论文中所呈现的,应该是一个非常好、很具有影响力的深层网络架构。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170446.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • python注入_Python——dll注入

    python注入_Python——dll注入dll攻击原理分析什么是dll动态链接库,是在微软Windows操作系统中实现共享函数库概念的一种方式。这些库函数的扩展名是”.dll”、”.ocx”(包含ActiveX控制的库)或者”.drv”(旧式的系统驱动程序)。为何有dll由于进程的地址空间是独立的(保护模式),当多个进程共享相同的库时,每个库都在硬盘和进程彼此的内存存放一份的话,对于早期的计算机来说,无疑是一种极大的浪费,于是win…

  • 十进制小数转为二进制小数方法是什么_二进制转十进制计算题

    十进制小数转为二进制小数方法是什么_二进制转十进制计算题首先需要明确一点就是并不是所有的十进制小数都能用二进制数精确表示的。这是由于进制的局限性导致的。例如三进制的0.1,用十进制表示是无限循环小数0.333333…..十进制的小数转换为二进制的方法为十进制小数乘2,取出整数作为二进制小数第一位,余下的小数再乘以2,取出整数作为小数第二位,如此反复,直至余下的小数为0。例:十进制0.3750.375*2=0.75————0(0.75的整数部分为0)0.75*2=1.5————1(1.5的整数…

  • powerDesigner生成HTML报表

    powerDesigner生成HTML报表报告-GenerateReport

  • 学员管理系统(完整版)

    前言:学员管理系统是刚接触python时算是一个比较难的小项目,毕竟第一次接触这样的思维逻辑,不过用心学起来还是很有趣的,发现乐在其中,也就不觉得难了。下面给大家分享一下学员管理系统较为完整的代码(当然其中肯定有很多不足,毕竟是新手,菜鸟小程序猿,还请见谅!多谢!)言归正传:学员管理拆分为一下步骤:首先:先定义存储所有学员信息的大列表students=[]添加学员,代码如下:查…

  • sublime激活【2021最新】

    (sublime激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~2JTX0APX6F-eyJsaWNlb…

  • python数组截取

    python数组截取importtensorflowastfimportnumpyasnp#one-dimentiona=np.array([0,1,2,3,4,5,6,7,8,9])print(a)b=a[:4]print(b)c=a[4:]print(c)#multi-dimentiond=np.array([[0,1,2,3,4,5,6,7,8,9],[1,2,3,4…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号