卷积神经网络的一些经典网络2(Inception)
在架构内容设计方面,其中一个比较有帮助的想法是使用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)的更多相关文章
- 卷积神经网络的一些经典网络(Lenet,AlexNet,VGG16,ResNet)
LeNet – 5网络 网络结构为: 输入图像是:32x32x1的灰度图像 卷积核:5x5,stride=1 得到Conv1:28x28x6 池化层:2x2,stride=2 (池化之后再经过激活函数 ...
- [DeeplearningAI笔记]卷积神经网络2.2经典网络
4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 [LeNet]--Lécun Y, Bottou L, Bengio Y, et al. Gradient-bas ...
- 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 ...
- 经典卷积神经网络的学习(三)—— Inception Net
Google Inception Net 首次出现在 ILSVRC 2014 的比赛中(和 VGGNet 同年),就以较大优势拔得头筹.那届比赛中的 Inception Net 一般被称为 Incep ...
- 经典卷积神经网络的学习(二)—— VGGNet
1. 简介 VGGNet 是牛津大学计算机视觉组(Visual Geometry Group)和 Google DeepMind 公司的研究员一起研发的深度卷积神经网络,其主要探索了卷积神经网络的深度 ...
- 经典卷积神经网络算法(1):LeNet-5
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- CS231n课程笔记翻译9:卷积神经网络笔记
译者注:本文翻译自斯坦福CS231n课程笔记ConvNet notes,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客和猴子翻译完成,堃堃和李艺颖进行校对修改. 原文如下 内容列 ...
- 【cs231n】卷积神经网络
较好的讲解博客: 卷积神经网络基础 深度卷积模型 目标检测 人脸识别与神经风格迁移 译者注:本文翻译自斯坦福CS231n课程笔记ConvNet notes,由课程教师Andrej Karpathy授权 ...
- 深度学习:Keras入门(二)之卷积神经网络(CNN)
说明:这篇文章需要有一些相关的基础知识,否则看起来可能比较吃力. 1.卷积与神经元 1.1 什么是卷积? 简单来说,卷积(或内积)就是一种先把对应位置相乘然后再把结果相加的运算.(具体含义或者数学公式 ...
随机推荐
- 复习ACCESS注入
0x00前言:在学校看完了ACCESS注入.但当时并没有电脑,所以做好了笔记 回到家自己搭建了一个有ACCESS注入的站进行练习,虽然这可能没有什么用处 毕竟现在大多的网站都有waf或安全狗.而且AC ...
- .NET Core快速入门教程 5、使用VS Code进行C#代码调试的技巧
一.前言 为什么要调试代码?通过调试可以让我们了解代码运行过程中的代码执行信息,比如变量的值等等.通常调试代码是为了方便我们发现代码中的bug.ken.io觉得熟练代码调试技巧是成为合格程序员的基本要 ...
- js 关于日期,字符串转化
<html><head><title>简单获取日期的JS</title><meta http-equiv="Content-Type&q ...
- iOS之SQLite使用详解
#pragma mark - 1.引入<sqlite3.h>头文件//添加libsqlite3.0.tbd#import <sqlite3.h>static sqlite3 * ...
- 在使用Qt5.8完成程序动态语言切换时遇到的问题
因为之前了解过一些Qt国际化的东西,所以在写程序的时候需要显示给用户的字符都使用了 tr(" ")的形式,然后使用 Qt Linguist得到相应的 qm(Qt message)文 ...
- 【IntelliJ IDEA】使用idea解决新建jsp文件而找不到jsp文件模版的新建选项
使用idea解决新建jsp文件而找不到jsp文件模版的新建选项,这样每次创建一个新的jsp文件岂不是很耗时间? 解决办法: 就是要让idea知道你需要在这个目录下创建jsp文件 左上角,file中点击 ...
- [福大软工] W班 软件产品案例分析
作业要求 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/1300 评分细则 第一部分 调研,评测 (3 ...
- 201621123062《Java程序设计》第一周学习总结
1.本周学习总结 关键词: 初步熟悉Java的基本组成.语言特点(简单性.结构中立性).运行环境.简单语法等. 关键概念之间的联系: 1.JVM是Java程序唯一认识的操作系统,其可执行文件为.cla ...
- find命令之(-atime,-ctime,-mtime)
关于find命令,以拙见总结如下: >>>定义: find命令用来在指定目录下查找文件. 任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则fin ...
- loadrunner下载资源时步骤下载超时 (120 seconds) 已过期
下载资源所用时间超过120秒时,就会报出这个错误,解决方法是设置加大超时时间 运行时设置(快捷键F4) Internet 协议--首选项--高级--选项--General--步骤下载超时(秒) 可以把 ...