深度学习笔记(30) Inception网络

  • 1. Inception模块
  • 2. 瓶颈层
  • 3. Inception网络
  • 4. Inception网络的细节

1. Inception模块

构建卷积层时
要决定过滤器的大小究竟是1×1,3×3还是5×5,或者要不要添加池化层
Inception网络的作用就是自主决定
虽然网络架构因此变得更加复杂,但网络表现却非常好

例如,28×28×192维度的输入层
Inception网络或Inception层的作用:
代替人工来确定卷积层中的过滤器类型,或者确定是否需要创建卷积层或池化层

如果使用1×1卷积,输出结果会是28×28×filters
假设输出为28×28×64,并且这里只有一个层

如果使用3×3的过滤器,,应用same卷积,输出是28×28×128
然后把第二个值堆积到第一个值上

或许用5×5过滤器或许会更好,输出变成28×28×32
再次使用same卷积,保持维度不变

或许只用池化操作,得到一些不同的输出结果
把它也堆积起来,这里的池化输出是28×28×32
为了匹配所有维度,需要对最大池化使用padding,它是一种特殊的池化形式
因为如果输入的高度和宽度为28×28,则输出的相应维度也是28×28
然后再进行池化,padding不变,步幅为1

有了Inception模块,就可以输入某个量,因为它累加了所有数字
这里的最终输出32+32+128+64=256

基本思想是Inception网络不需要人为决定使用哪个过滤器或者是否需要池化
而是由网络自行确定这些参数,可以给网络添加这些参数的所有可能值,然后把这些输出连接起来
让网络自己学习它需要什么样的参数,采用哪些过滤器组合


2. 瓶颈层

但不难发现,所描述的Inception层有一个问题,就是计算成本

在之前5×5的过滤器,一个28×28×192的输入块,执行一个5×5卷积,它有32个过滤器,输出为28×28×32
计算这个28×28×32输出的计算成本:
它有32个过滤器,因为输出有32个通道,每个过滤器大小为5×5×192,输出大小为28×28×32
所以要计算28×28×32个数字
对于输出中的每个数字来说,都需要执行 5×5×192 次乘法运算
所以乘法运算的总次数为每个输出值所需要执行的乘法运算次数(5×5×192)乘以输出值个数(28×28×32)
把这些数相乘结果等于1.2亿(120422400)
即使在现在,用计算机执行1.2亿次乘法运算,成本也是相当高的


这是另外一种架构,其输入为28×28×192,输出为28×28×32
其结果是这样的,对于输入层,使用1×1卷积把输入值从192个通道减少到16个通道
然后对这个较小层运行5×5卷积,得到最终输出

请注意,输入和输出的维度依然相同,输入是28×28×192,输出是28×28×32
但要做的就是把左边这个大的输入层压缩成这个较小的的中间层,它只有16个通道,而不是192个
这被称为 瓶颈层
瓶颈通常是某个对象最小的部分,瓶颈就是这个瓶子最小的部分
同理,瓶颈层也是网络中最小的部分,先缩小网络表示,然后再扩大它

这个第一个卷积层的计算成本:
应用1×1卷积,过滤器个数为16,每个过滤器大小为1×1×192
这两个维度相匹配(输入通道数与过滤器通道数)
28×28×16这个瓶颈层的计算成本:
输出28×28×16中每个元素都做192次乘法,用1×1×192来表示
相乘结果约等于240万

第二个卷积层的计算28×28×32,对每个输出值应用一个5×5×16维度的过滤器
计算结果为1000万

所以所需要乘法运算的总次数是这两层的计算成本之和1204万
计算成本从1.2亿下降到了原来的十分之一

总结一下,如果在构建神经网络层的时候,不想决定池化层是使用1×1,3×3还是5×5的过滤器
那么Inception模块就是最好的选择,可以应用各种类型的过滤器,只需要把输出连接起来
之后关于计算成本问题,可以通过使用1×1卷积来构建瓶颈层,从而大大降低计算成本


3. Inception网络

Inception模块会将之前层的激活或者输出作为它的输入,作为前提
这是一个28×28×192的输入

先通过一个1×1的层,再通过一个5×5的层
1×1的层可能有16个通道,而5×5的层输出为28×28×32

为了在这个3×3的卷积层中节省运算量,也可以做相同的操作
这样的话3×3的层将会输出28×28×128

或许还想将其直接通过一个1×1的卷积层
这样的话过程就只有一步,假设这个层的输出是28×28×64

接着是池化层
为了能在最后将这些输出都连接起来,会使用same类型的padding来池化
使得输出的高和宽依然是28×28,这样才能将它与其他输出连接起来

但注意,如果进行了最大池化,即便用了same padding,3×3的过滤器,stride为1
其输出将会是28×28×192,其通道数或者说深度与这里的输入(通道数)相同
所以看起来它会有很多通道
实际要做的就是再加上一个1×1的卷积层,将通道的数量缩小,缩小到28×28×32
也就是使用32个维度为1×1×192的过滤器,所以输出的维度其通道数缩小为32
这样就避免了最后输出时,池化层占据所有的通道

最后,将这些方块全都连接起来,把得到的各个层的通道都加起来
最后得到一个28×28×256的输出

这就是一个Inception模块
而Inception网络所做的就是将这些模块都组合到一起


4. Inception网络的细节


这是一张取自Szegety et al的论文中关于Inception网络的图片
会发现图中有许多重复的模块,可能整张图看上去很复杂
但如果只截取其中一个环节,就会发现上述的Inception模块

所以Inception网络只是很多这些学过的模块在不同的位置重复组成的网络
所以如果理解了之前所学的Inception模块,就也能理解Inception网络


在网络的最后几层,通常称为全连接层
在它之后是一个softmax层(编号1)来做出预测
这些分支(编号2)所做的就是通过隐藏层(编号3)来做出预测
所以这其实是一个softmax输出(编号2),(编号1)也是

另一条分支(编号4),它也包含了一个隐藏层
通过一些全连接层,然后一个softmax来预测,输出结果的标签

应该把它看做Inception网络的一个细节
它确保了即便是隐藏单元和中间层(编号5)也参与了特征计算
它在Inception网络中,起到一种调整的效果,并且能防止网络发生过拟合
Inception网络,无非是很多个Inception模块一环接一环,最后组成了网络


参考:

《神经网络和深度学习》视频课程


相关推荐:

深度学习笔记(29) 1×1 卷积
深度学习笔记(28) 残差网络
深度学习笔记(27) 经典卷积网络
深度学习笔记(26) 卷积神经网络
深度学习笔记(25) 池化层


谢谢!

深度学习笔记(30) Inception网络相关推荐

  1. 深度学习笔记-----多输入网络 (Siamese网络,Triplet网络)

    目录 1,什么时候需要多个输入 2,常见的多输入网络 2.1 Siamese网络(孪生网络) 2.1 Triplet网络 1,什么时候需要多个输入 深度学习网络一般是输入都是一个,或者是一段视频切片, ...

  2. 深度学习笔记之lSTM网络

    解决梯度爆炸问题可以利用LSTM网络 也可以用clip gradients 算法https://blog.csdn.net/jiachen0212/article/details/80285648 相 ...

  3. 学习笔记(30):Python网络编程并发编程-Event事件

    立即学习:https://edu.csdn.net/course/play/24458/296447?utm_source=blogtoedu threading.Event事件 1.概念及功能:主要 ...

  4. 动手深度学习笔记(四十)7.4. 含并行连结的网络(GoogLeNet)

    动手深度学习笔记(四十)7.4. 含并行连结的网络(GoogLeNet) 7.4. 含并行连结的网络(GoogLeNet) 7.4.1. Inception块 7.4.2. GoogLeNet模型 7 ...

  5. 深度学习笔记(46) 深度卷积网络学习

    深度学习笔记(46) 深度卷积网络学习 1. 学习内容 2. 第一层 3. 第二层 4. 第三层 5. 第四层 6. 第五层 1. 学习内容 深度卷积网络到底在学什么? 来看一个例子,假如训练了一个卷 ...

  6. 深度学习笔记(43) Siamese网络

    深度学习笔记(43) Siamese网络 1. Siamese网络 2. 建立人脸识别系统 3. 训练网络 1. Siamese网络 深度学习笔记(42) 人脸识别 提到的函数ddd的作用: 输入两张 ...

  7. 深度学习笔记(27) 经典卷积网络

    深度学习笔记(27) 经典卷积网络 1. 前言 2. LeNet-5 3. AlexNet 4. VGGNet 1. 前言 讲了基本构建,比如卷积层.池化层以及全连接层这些组件 事实上,过去几年计算机 ...

  8. 深度学习笔记(12) Batch归一化网络

    深度学习笔记(12) Batch归一化网络 1. Batch归一化 2. 激活值归一化 3. 特殊情况不归一化 4. mini-batch上的Batch归一化 1. Batch归一化 Batch归一化 ...

  9. HALCON 21.11:深度学习笔记---网络和训练过程(4)

    HALCON 21.11:深度学习笔记---网络和训练过程(4) HALCON 21.11.0.0中,实现了深度学习方法.关于网络和训练过程如下: 在深度学习中,任务是通过网络发送输入图像来执行的.整 ...

最新文章

  1. 黑盒测试之边界值测试
  2. 独家 | 机器学习真实案例研究:基于文本描述的交易聚类
  3. VS编译时output/Error list窗口自动弹出设置
  4. HTML字体怎么显示,教你如何用CSS来控制网页字体的显示样式
  5. (一)面试题:TCP三次握手
  6. HDU ACM 1078 FatMouse and Cheese 记忆化+DFS
  7. SpringBoot如何把mysql中的数据显示到html页面上?
  8. php云解析播放器,xyplay云解析PHPV3.4.1优化稳定版视频解析
  9. 【Java】Kryo运行报错:Exception in thread “main“ java.lang.IllegalArgumentException:Class is not registered
  10. PyQt5 关于Qt Designer的初步应用和打包
  11. 质量和品质的区别_议价采购,招标采购,比价采购的区别是什么?一文看懂?...
  12. matlab差分编码,差分编码FSK调制解调matlab源程序
  13. setting文件详解
  14. HDU 2243(AC自动机+矩阵快速幂)
  15. 阿里云服务器遭ddos攻击防御案例
  16. mysql hugepage_mysql启用hugepage-阿里云开发者社区
  17. GPT磁盘及ID号介绍
  18. cf1111d(退背包)
  19. 弘辽科技:淘宝店铺出现异常,卖家该如何应对?要注意些什么?
  20. Spring IOC理论推导及其本质

热门文章

  1. 将汉字转成拼音字头的方法
  2. 世界上最伟大的推销员--2
  3. mysql for vs2013_mysql vs2013
  4. android窗口动画体系,Android 7.1 GUI系统-窗口管理WMS-动画的执行(七)
  5. android自动发送dtmf,Android发送dtmf键盘事件(模拟通话界面键盘事件)
  6. HCL安装和使用模拟器中遇到的问题
  7. listView基本实现
  8. 11.排序算法_1_快速排序
  9. saltstack之基础入门系列文章简介
  10. 怎样验证软件是否可信?是否被篡改?