在架构内容设计方面,其中一个比较有帮助的想法是使用1x1卷积。1x1卷积能做什么?

对于6x6x1的通道的图片来说,1x1卷积效果不佳,如果是一张6x6x32的图片,那么使用1x1卷积核进行卷积效果更好。

1x1卷积所实现的功能是,遍历36(6x6)个单元,计算左图中32个数字和卷积核中32个数字的乘积(element wise),然后应用于ReLU非线性函数。

这种方法称为1x1卷积,有时候也被称为Network in Network

  我们可以用池化层压缩输入的高度与宽度,而1x1卷积可以改变输入的通道数。

  每个卷积核的大小是1x1x192(卷积核的通道数与输入层的通道数一致),总共32个卷积核

1x1卷积作用:

1)  改变输入的通道数

2)  为网络添加非线性函数(卷积之后会经过ReLU等非线性激活函数),使得网络可以学习更复杂的函数

3)  若减少输入通道数,可以减少参数数量

Inception网络

构建卷积层时,你要决定过滤器的大小究竟是1x3,3x3或者5x5,或者要不要添加池化层。而Inception网络的作用就是代替你做决定,虽然网络变得更大更复杂,但是网络的表现却非常好。

Inception的作用是,代替人工来确定卷积层中过滤器的类型,或者确定是否需要创建卷积层或池化层。

下图中,如果使用1x1卷积,那么输出为28x28x64;如果使用3x3的卷积核,那么输出是28x28x128,然后把第二个堆积到第一个值上,为了匹配维度,我们在做3x3卷积时使用的padding应该使用same;然后再使用5x5卷积核,仍然将结果堆叠到前面两个值中;也有可能你不想要卷积层,那就用池化层,得到一些不同的输出结果,我们也把它堆叠起来,这里的池化输出是28x28x32,为了匹配维度,我们需要对最大池化使用padding=same,stride=1。叠加之后的结果是32+32+128+64=256通道。即Inception模块的输入数28x28x192,输出是28x28x256,这就是Inception网络的核心内容。

基本思想是Inception网络不需要人为决定使用哪个fliter,或者是否需要池化,而是由网络自行确定(学习)这些参数,自行学习是否使用这些fliter或者池化。

  我们把重点集中在5x5卷积核中。我们现在计算一下5x5的计算成本。由于输出大小是28x28x32,所以要计算28x28x32个数字,对于每个数字来说,都要执行5x5x192次乘法运算,所以乘法运算的总次数为28x28x32 x 5x5x192 ≈1.2亿,这个计算成本是非常高的。

先使用1x1卷积把输入值从192通道减少到16个通道,然后对这个较小层,运行5x5卷积,得到最终输出。这种方法,输入输出的维度与上面的只用5x5卷积相同。但我们要做的就是把左边的这个大的输入层压缩成这个较小的中间层,它只有16个通道,而不是192个通道,这个有时候被称为瓶颈层(bottleneck layer,瓶颈通常是某个对象最小的部分。

  我们现在来看看这个计算成本。应用1x1卷积,卷积核个数为16个,每个卷积核的大小为1x1x192,在28x28x16这个层的计算成本是,输出28x28x16中的每个元素都做192(1x1x192)次乘法,即28x28x16x192≈240万;对于第二个卷积层,它的输出是28x28x32,对于每个输出值,都应用一个5x5x16维度的卷积核,即28x28x32x5x5x16=1000万;两次卷积运算总共所需的次数是240万+1000万=1240万,与上面只用5x5卷积运算的相比,计算成本从1.2亿降到了约原来的十分之一,即1240万;由于所需的加法运算与乘法次数近似相等,故只统计了乘法运算的次数。

总结来说,如果你在构建神经网络层的时候,不想决定使用1x1或3x3或5x5卷积核或池化层时,那么Inception模块就是最好的选择,我们可以应用各种类型的卷积核或者池化层,只需把它们的输出连接起来就行。而使用1x1卷积来构建bottleneck layer,可以大大降低计算成本。事实证明,只要合理构建bottleneck layer,我们既可以显著缩小表示层的规模,又不会降低网络性能。

Inception模块如下图所示:

需要说明的有:

1)在使用3x3和5x5卷积时,先进行1x1卷积,来缩小输入的通道数,使得可以减少计算量。

2)在使用Max Pool时,设置的参数是3x3,padding=same,stride=1,此时输出大小与输入大小相同,都是28x28x192,为了减少通道数,我们在其后面再加一个1x1卷积,使得缩小到28x28x32,这样避免了最后输出时池化层占据了过多的通道。

3)最后将每个模块(1x1卷积、3x3卷积、5x5卷积和最大池化)的结果连接到一起

  下图是Inception网络(称为GoogLeNet)的结果,可以看出,网络其实就是Inception模块的组合,其中有些Inception模块中间的最大池化模块的作用是改变输入的宽度和高度。另外论文中,网络还有一些分支,这些分支所做的就是通过隐藏层来做出预测,它确保了即使是隐藏单元和中间层,也参与了特征计算,它们也能预测出图片的分类,它们在Inception网络中起到起到一种调整的效果,并能防止网络发生过拟合

内容主要来自与:

Andrew Ng的卷积神经网络课程

卷积神经网络的一些经典网络2(Inception)的更多相关文章

  1. 卷积神经网络的一些经典网络(Lenet,AlexNet,VGG16,ResNet)

    LeNet – 5网络 网络结构为: 输入图像是:32x32x1的灰度图像 卷积核:5x5,stride=1 得到Conv1:28x28x6 池化层:2x2,stride=2 (池化之后再经过激活函数 ...

  2. [DeeplearningAI笔记]卷积神经网络2.2经典网络

    4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 [LeNet]--Lécun Y, Bottou L, Bengio Y, et al. Gradient-bas ...

  3. CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题,Highway NetWork 则允许保留一定比例的原始输入 x。(这种思想在inception模型也有,例如卷积是concat并行,而不是串行)这样前面一层的信息,有一定比例可以不经过矩阵乘法和非线性变换,直接传输到下一层,仿佛一条信息高速公路,因此得名Highway Network

    from:https://blog.csdn.net/diamonjoy_zone/article/details/70904212 环境:Win8.1 TensorFlow1.0.1 软件:Anac ...

  4. 经典卷积神经网络的学习(三)—— Inception Net

    Google Inception Net 首次出现在 ILSVRC 2014 的比赛中(和 VGGNet 同年),就以较大优势拔得头筹.那届比赛中的 Inception Net 一般被称为 Incep ...

  5. 经典卷积神经网络的学习(二)—— VGGNet

    1. 简介 VGGNet 是牛津大学计算机视觉组(Visual Geometry Group)和 Google DeepMind 公司的研究员一起研发的深度卷积神经网络,其主要探索了卷积神经网络的深度 ...

  6. 经典卷积神经网络算法(1):LeNet-5

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  7. CS231n课程笔记翻译9:卷积神经网络笔记

    译者注:本文翻译自斯坦福CS231n课程笔记ConvNet notes,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客和猴子翻译完成,堃堃和李艺颖进行校对修改. 原文如下 内容列 ...

  8. 【cs231n】卷积神经网络

    较好的讲解博客: 卷积神经网络基础 深度卷积模型 目标检测 人脸识别与神经风格迁移 译者注:本文翻译自斯坦福CS231n课程笔记ConvNet notes,由课程教师Andrej Karpathy授权 ...

  9. 深度学习:Keras入门(二)之卷积神经网络(CNN)

    说明:这篇文章需要有一些相关的基础知识,否则看起来可能比较吃力. 1.卷积与神经元 1.1 什么是卷积? 简单来说,卷积(或内积)就是一种先把对应位置相乘然后再把结果相加的运算.(具体含义或者数学公式 ...

随机推荐

  1. 关于在linux下安装git,以及在idea上将项目部署到码云上

    GIT 基于对linux感兴趣,并且也考虑到以后从事开发后也会用到linux,着实在闲余之际学学linux.最近在用VM虚拟机环境下学做一个项目,在git上卡了一点时间,但同时也收获  了不少,下面写 ...

  2. vue技术解析六之生命周期函数

  3. 【Python】 高级文件操作 shutil

    shutil 很多时候,我想要对文件进行重命名,删除,创建等操作的时候的想法就是用subprocess开一个子进程来处理,但是实际上shutil可以更加方便地提供os的文件操作接口,从而可以一条语句搞 ...

  4. NODE_ENV 不是内部或外部命令,也不是可运行的程序,或者批处理文件

    今天碰到一个奇葩问题,mac上能执行的npm命令,到windows上执行不聊了,报这个错 NODE_ENV 不是内部或外部命令,也不是可运行的程序,或者批处理文件 这是怎么回事呢?听我慢慢道来. &q ...

  5. 攻防组网之—-MikroTik软路由的配置和FUZZ

    作者:红发香克斯 开篇之前一直想借助一台高性能PC利用VMWare组建一个攻防网络,之前有一贴写过找到了一个软路由系统,就是可以在VMWare中使用的路由器操作系统,那个系统还挺常用,上次帖子写到了安 ...

  6. OSM数据下载地址

    1.OSM数据下载地址 官网下载: http://planet.openstreetmap.org/ GeoFabrik:http://www.geofabrik.de/ Metro Extracts ...

  7. Jquery瀑布流布局,jQuery Wookmark Load 示例

    瀑布流布局非常适合大量图片的展示,一改过去裁剪图片尺寸同意的排版,每张图片都能完全展示,并错落有致,让人眼前一亮. 注意事项:img元素的width和weight属性需要写,否则定位会不准确. 查看j ...

  8. python web——Django架构

    环境:windows/linux/OS 需要的软件:Firefox 浏览器(别的也可以 不过firfox和python的webdriver兼容性好) git版本控制系统(使用前要配置 用户 编辑器可以 ...

  9. C语言博客作业--一二维数组。

    一.PTA实验作业 题目1:7-1 将数组中的数逆序存放 1. 本题PTA提交列表 2. 设计思路 定义三个整型变量n用来存放整数个数i,j是循环数 scanf("%d",& ...

  10. 学号:201621123032 《Java程序设计》第10周学习总结

    1:本周学习总结 1.1.:以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2:书面作业 2.1.:常用异常--结合题集题目7-1回答 2.1.1:自己以前编写的代码中经常出现什么异常.需要捕 ...