深度学习奠基之作GoogLeNet解读《Going Deeper with Convolutions》(现代卷积神经网络/经典卷积神经网络/网络结构/原理解读)下篇

 上篇

深度学习奠基之作GoogLeNet解读《Going Deeper with Convolutions》(现代卷积神经网络/经典卷积神经网络/网络结构/原理解读)上篇_会害羞的杨卓越的博客-CSDN博客

 6、GoogLeNet

所谓的GoogLeNet就是一大堆的Inception块的堆叠,这点和VGG本质没有太多区别 

5段,9个Inception块

  • GoogLeNet一共使用了9个Inception块全局平均汇聚层(避免在最后使用全连接层)的堆叠来生成估计值,第一个模块类似于AlexNet和LeNet,Inception块的组合从VGG继承
  • Inception块之间的最大汇聚层可以降低维度
  • GoogLeNet由大量的Inception块组成,如上图所示,总共分成了5个stage(有点类似于VGG,高宽减半一次为1个stage)
  • GoogLeNet中总共有9个Inception块,主要集中在stage 3(2个)、stage 4(5个)和stage 5(2个)
  • GoogLeNet中大量地使用了1 * 1的卷积,把它当成全连接来使用,来做通道数的变换(受到NiN的影响)
  • GoogLeNet中也使用了全局平均池化层
  • 因为最后没有设置Inception块使得最后的输出通道数等于标签的类别数,所以在倒数第二步做完全局平均池化之后会拿到一个长为通道数的向量,最后再通过一个全连接层映射到标号所要的类别数(这里并没有强求最后的输出通道数一定要等于标签类别数,做了简化,更加灵活)

 这里的Stage就是长宽减半,Inception Block不改变高宽只改变通道数。

具体结构:

1、Stage 1:

第一个模块使用了一个卷积层和一个最大池化层:

  • 第一个模块先使用了一个64通道7 * 7的卷积层(stride = 2,padding = 3)
  • 然后使用了一个3 * 3的最大池化层(stride = 2,padding = 1)

2、Stage 2:

第二个模块使用了两个卷积层和一个最大池化层

  • 第一个卷积层是64通道1 * 1的卷积层
  • 第二个卷积层是192通道的3 * 3的卷积层(stride = 3,padding = 1)
  • 最大池化层的窗口大小为3 * 3(stride = 2,padding = 1)

3、Stage 3:

第三个模块串联了两个完整的Inception块和一个最大池化层

  • 第一个Inception块的输出通道数为:64 + 128 + 32 + 32 = 256,四条路经之间的输出通道数量比是:64 :128 :32 :32 = 2 :4 :1 :1。第二条和第三条路径首先将输入通道的数量分别由192减少到96和16,然后连接第二个卷积层(Inception(192,64,(96,128),(16,32),32))
  • 第二个Inception块的输出通道数增加到128 + 192 + 96 + 64 = 480,四条路经之间的输出通道数量比为128 :192 :96 :64 = 4 :6 :3 :2,第二条和第三条路径首先将输入通道数量分别由256减少到128和32,然后连接第二个卷积层(Inception(256,128,(128,192),(32,96),64))
  • 最大池化层的窗口大小为3 * 3(stride = 2,padding = 1)

4、Stage 4:

第四个模块串联了5个Inception块和一个最大池化层

  • 第一个Inception块的输出通道数为:192 + 208 + 48 + 64 = 512(Inception(480,192,(96,208),(16,48),64))
  • 第二个Inception块的输出通道数为:160 + 224 + 64 + 64 =512(Inception(512,160,(112,224),(24,64),64))
  • 第三个Inception块的输出通道数为:128 + 256 + 64 + 64 = 512(Inception(512,128,(128,256),(24,64),64))
  • 第四个Inception块的输出通道数为:112 + 288 + 64 + 64 =528 (Inception(512,112,(144,288),(32,64),64))
  • 第五个Inception块的输出通道数为:256 + 320 +128 + 128 = 832(Inception(528,256,(160,320),(32,128),128 ))

以上这些路径的通道数分配和和第三模块中的类似

  • 第一条路经仅含1 * 1的卷积层
  • 含3 * 3卷积层的第二条路径输出最多通道
  • 含5 * 5卷积层的第三条路经
  • 含3 * 3最大汇聚层的第四条路经
  • 第二、第三条路径都会先按比例减小通道数

5、Stage 5:

第五个模块中有两个Inception块和一个输出层:

  • 第一个Inception块的输出通道数为:256 + 320 + 128 +128 = 832(Inception(832,256,(160,320),(32,128),128))
  • 第二个Inception块的输出通道数为:384 + 384 + 128 +128 = 1024(Inception(832,384,(192,384),(48,128),128))
  • 输出层和NiN一样使用全局平均汇聚层,将每个通道的高和宽变成1
  • 最后将输出变成二维数组,再接上一个输出个数为标签类别数的全连接层 nn.Linear(1024,10)

以上这些路径通道数的分配思路和第三、第四模块一致

7、段1、段2

更小的宽口,更多的通道

首先输入都是(3,224,224)长宽都是224,通道数是3,都是增加通道数,降低长宽。

最后的输出AlexNet是(256,12,12)GoogLeNet是(192,28,28)

AlexNet是长宽降的比较多,但是通道更多

8、段3

 第三个stage使用了两个Inception Block,输入输出的长宽先后变化情况是(28,18),(28,18),(14,14)。

经过第一个Inception Block后,通道数从192变成了256,经过第二个Block,256又变成了480,然后在经过一个步长为2的maxpooling。

这些超参数的调整(每个Inception的通道数如何变化,以及多少个Block的堆叠),是先写出来设计,然后每个设计都安排训练,最后选择训练效果最好的就是哪一个。

9、段4、段5

 段4段5也其实里面是怎样计算的,也并没有很清楚的说明,这也导致了GoogLeNet特别的难以复现,因为有那么多的超参数。

最后的输出是一个1024的向量。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器学习杨卓越

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值