GoogLeNet网络结构学习
1.背景介绍
GoogLeNet, 一个22层的深度网络,2014年ILSVRC挑战赛冠军,将Top5 的错误率降低到6.67%。论文地址:Going deeper with convolutions。
据说起名为“GoogLeNet”而非“GoogleNet”,是为了向早期的LeNet致敬。
2.网络结构
GoogLeNet网络的整体结构如下:
GoogLeNet清晰版本
3.主要创新点
一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,但是这样会带来一些缺陷:
- 参数太多,容易过拟合
- 网络越大计算复杂度越大,难以应用
- 网络越深,梯度越往后越容易消失
于是GoogLeNet针对这些问题给出了两个解决方案:
深度方面:层数更深,文章采用了22层,为了避免上述提到的梯度消失问题,GoogLeNet巧妙的在不同深度处增加了两个loss来保证梯度回传消失的现象。
宽度方面:采用了Inception结构,这是一种网中网(Network In Network)的结构,即原来的结点也是一个网络。
不同size的卷积核的目的
采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;
但是,使用3x3,5x5的卷积核参数大小仍然过于巨大
- 为此为了降维改进如下:
1x1卷积层
- 对特征降维,一方面可以解决计算瓶颈,同时限制网络的参数大小,可以将网络做的更「宽」和更「深」。如何降维,本文后面解释。
4.维度计算
注:#3×3 reduce,#5x5 reduce等表示在这之前使用了 1×1 的卷积核降维之后输出宽度。
第一层 convolution层
- 输入(data):224×224×3
- 卷积核size:7×7,滑动步长(stride)为 2,padding为 3
- 输出维度:112×112×64,计算方式:(224 + 2×3 − 7 + 1) / 2 = 112 ,kernel size = 64
第 二 层 max pool层
- 输入维度:112×112×64
- pooling size:3×3,滑动步长(stride)为 2,padding为 1
- 输出维度:56×56×64,计算方式:(112 + 2×1 − 3 +1 ) / 2 = 56
第三层 convolution层
- 输入维度:56x56x64
- 卷积核size:3x3,滑动步长(stride)为1,padding为1
- 输出维度:56x56x192,计算方式:(56 + 2x1 - 3 + 1)/ 1 = 56,kernel size = 192
第四层 max pool层
- 输入维度:56x56x192
- pooling size: 3x3,滑动步长(stride)为2,padding为1
- 输出维度:28x28x192,计算方式:(56 + 2x1 - 3 + 1)/ 2 = 28
第五层 Inception层
分为4条通道,每条通道的输入均为第四层的输出(28 x 28 x 192):
通道1:1×1 卷积层,64个卷积核,输出大小为 28×28×64;
通道2:1×1 卷积层,96个卷积核,输出大小为 28×28×96;作为输入进入 3×3 卷积层,输出大小为 28×28×128;
通道3:1×1 卷积层,32个卷积核,输出大小为 28×28×32;作为输入进入 3×3 卷积层,输出大小为 28×28×32;
通道4:3×3 的 pooling 层,输出大小为28×28×192;作为输入进入 1x1卷积层,输出大小为28×28×32;
Inception层的输出为这四个通道的输出和:64 + 128 + 32 + 32 = 256
这就是GoogLeNet增加宽度的方式
如何降维,以第五层第二个通道为例:
如果没有那个 1×1卷积层,参数个数为 3×3×192×128=221,184 个;
如果加了一个 1×1卷积层,参数个数为 1×1×192×96+3×3×96×128=129,024 个;
由此可以看出,这一通道节约了大于一半参数,其他的类似。
GoogLeNet网络结构学习相关推荐
- 经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)
前言 在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名--GoogLeNet . 作为2014年Ima ...
- 卷积神经网络模型之——GoogLeNet网络结构与代码实现
文章目录 GoogLeNet网络简介 GoogLeNet网络结构 Inception之前的几层结构 Inception结构 Inception3a模块 Inception3b + MaxPool In ...
- 深入解读GoogLeNet网络结构(附代码实现)
前言 七夕了,看着你们秀恩爱,单身狗的我还是做俺该做的事吧! 在上一篇文章中介绍了VGG网络结构,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而同年分类任务的第 ...
- GoogleNet 网络结构
GoogleNet 网络结构 深度学习模型常常通过增加模型的深度或者宽度来获得更高的性能.本文将就深度学习常见的网络结构进行介绍. GoogLeNet是2014年Christian Szegedy提出 ...
- 贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现)
题目:贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现) 有关贝叶斯网络结构学习的一基本概念可以参考:贝叶斯网络结构学习方法简介 有关函数输入输出参数的解释可以参考:贝叶 ...
- 基于搜索的贝叶斯网络结构学习算法-K2
部分内容取自:[Cooper and Herskovits, 1991] Cooper, G. and Herskovits, E. (January, 1991). A Bayesian metho ...
- 贝叶斯网络结构学习若干问题解释
题目:贝叶斯网络结构学习若干问题解释 本篇主要为后续讲解具体结构学习算法打基础,共解释以下几个问题: 1.用于贝叶斯网络结构学习的数据集如何存储? 2.学得的贝叶斯网络结构如何存储? 3.什么是节点顺 ...
- 贝叶斯网络结构学习(基于BDAGL工具箱的MATLAB实现)
题目:贝叶斯网络结构学习(基于BDAGL工具箱的MATLAB实现) 有关贝叶斯网络结构学习的一基本概念可以参考:贝叶斯网络结构学习方法简介 有关函数输入输出参数的解释可以参考:贝叶斯网络结构学习若干问 ...
- 贝叶斯网络结构学习之连续参数处理方法
题目:贝叶斯网络结构学习之连续参数处理方法 注:本文有更新,参见<有关属性离散化算法CACC的补充说明>和<有关属性离散化算法CACC的再次补充说明>.以下为原文: 首先必须说 ...
最新文章
- 【P2774】方格取数问题(贪心+最大流,洛谷)
- Help Jimmy(递归)
- 软件概要设计和详细设计的区别
- OpenGL ES之GLSL自定义着色器编程实现粒子效果
- 最近找工作的面试经历
- .NET 5 自身就是一个 .NET Standard
- windows:(1)xmind常用快捷键
- 解决,文件上传到 ftp 服务器,中文出现乱码问题
- python 定义数组
- SAP License:把握好集成测试大关,ERP就成功了一大半
- 2008-05-23
- JavaWeb——Servlet(入门必备,web请求与响应的底层)
- thinkphp5引入调用外部类
- 【Foreign】Weed [线段树]
- js 生成二维码及打印
- 双硬盘双系统安装win10和centos7
- unshift() 方法php,unshift方法怎么使用
- 年薪30万IT精英 挥别都市回乡种田务农
- 渗透测试工具篇——sqlmap
- 龙芯中科官方宣布,龙芯中科企业办公信息化平台全面完成国产化替代