热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

浅述经典的4种卷积网络之(3)GoogleInceptionNet

这里不对GoogleInceptionNet网络进行详细的原理阐述,只是卷积网络的由来以及网络结构和网络参数进行叙述,然后通过tensorflow进行代码实现,参看《tensorf

这里不对Google Inception Net网络进行详细的原理阐述,只是卷积网络的由来以及网络结构和网络参数进行叙述,然后通过tensorflow进行代码实现,参看《tensorflow实战》。
1.Google Inception Net网络叙述
(1)Inception V1
获得2014年ILSVRC比赛分类项目的冠军,top-5错误率6.7%,22层神经网络。与VGGNet同年出现,以较大优势赢得第一名,Inception V1有22层,比alexnet的8层或者vggnet的19层深,但是计算量只有15亿次浮点运算,同时只有500万参数量,仅为alexnet(6000万)的1/12,却可以达到远剩余alexnet的准确率,非常优秀且实用的。Inception V1降低参数量的目的有两点:
①参数越多,模型越庞大,需要提供的数据就越多
②参数越多,耗费的计算资源就越大
Inception V1参数少但是效果好的原因除了模型层数更深、表达能力更强外,还有两点原因:
①去除了最后的全连接层,用全局平均池化层(即将图片尺寸变为1*1)来取代它。全连接层几乎是占据了alexnet和vggnet的90%的参数量,而且会引起过拟合,去除全连接层可以使模型训练加快,并且减轻了过拟合。用全局平均池化来取代全连接的做法借鉴了network in network论文。
②Inception V1精心设计的Inception model提高了参数利用率,这一部分也借鉴了network in network的思想,Inception model类似一个大网络中的小网络,其结构可以反复堆叠在一起形成大网络。不过Inception V1比NIN更增加了分支网络,NIN主要是级联的卷积层和MLPConv层。一般来说,卷积层要提升表达能力的方法就是增加输出通道数,副作用就是计算量增大和过拟合现象。每一个输出通道对应一个滤波器,共享参数,只能提取一类特征,而NIN的MLPConv则允许输出通道之间组合信息,MLPConv等同于普通卷积再连接一个1*1的卷积和ReLU**函数。
(2)Inception model
浅述经典的4种卷积网络之(3)Google Inception Net
图1 inception moudle结构图
如图1所示,inception moudle共四个分支,四个分支都用到了1*1,来进行低成本跨通道组织信息:
①第一个分支采用了1*1的卷积,这也是NIN提出的一个重要结构。1*1的卷积是一个非常好的结构,它可以跨通道组织信息,提高网络的表达能力,同时可以对输出通道升维和降维。
②第二个分支先使用了1*1卷积,然后连接3*3卷积,相当于进行了两次特征变换。
③第三个分支类似,先是1*1卷积,然后连接5*5卷积。
④第四个分支先是一个3*3最大池化,1*1卷积。
inception moudle的4个分支在最后通过聚合操作合并(在输出通道数这个维度上聚合),包含了3种不同尺寸的卷积和1个最大池化,增加网络对不同尺度的适应性,这一部分和multi-scale的思想类似。
人的神经元的连接是稀疏的,稀疏结构是非常适合神经网络的结构,尤其是对非常大型、非常深的神经网络,可以减轻过拟合并降低计算量,例如卷积神经网络就是稀疏的连接。inception net的主要目标就是找到最优的稀疏结构单元(inception module),论文中提到其稀疏结构基于hebbian原理。
hebbian原理:神经反射活动的池化与重复会导致神经元连接稳定性的持久性,当两个A和B距离很近,并且A参与了对B重复、持续的兴奋,那么某些代谢变化会导致A将作为能使B兴奋的细胞。总结一下即‘一起发射的神经元会在一起’,学习过程中的刺激会使神经元间的突触强度强度增加。
在整个网络中,会有多个堆叠的inception module,我们希望靠后的inception module可以捕捉到更高阶的抽象特征,因此靠后的inception module的卷积的空间集中度应该逐渐降低,这样可以捕捉到更大面积的特征。因此,越靠后的inception module中,3*3和5*5这两个大面积的卷积核的占比(输出通道)应该更多。
(3)Google Inception Net家族
①2014.9的论文 going deeper with convolutions提出了Inception V1,top-5错误率6.67%。
②2015.2的论文 batch normalization:accelerating deep network training by reducing internal covariate提出了Inception V2,top-5错误率4.8%。
③2015.12的论文 rethinking the inception architecture for computer vision提出的Inception V3,top-5错误率3.5%。
④2016.2的论文 inception-v4,inception-resnet and the impact of residual connections on learning 提出的Inception V4,top-5错误率3.08%。
(4)Inception V2
Inception V2
学习了VGGNet,用两个3*3的卷积代替5*5的大卷积,用来降低参数量和减轻过拟合,还提出了batch normalization(BN)。BN是一个有效的正则化方法,可以让大型卷积网络的训练速度加快多倍,同时收敛后的分类正确率也可以提高很多。BN用于神经网络的某层时,会对每一个mini-batch数据的内部进行(normalization)标准化处理,使输出规范到N(0,1)的正态分布,减少了internal covariate shift(内部神经元分布的改变)。BN的论文指出,传统的深度网络在训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习率解决这个问题。而对于每一层使用BN之后,可有效解决这个问题,学习速率可以增加很多倍,达到之前的准确率的迭代次数只有1/14.训练时间缩短,然后继续训练,达到更高准确率。因为BN某种意义上起到了正则化作用,故可减少或者取消dropout,简化网络结构。同时可去除LRN,彻底对训练样本进行shuffle,减少数据增强过程中对数据的光学畸变。

(5)Inception V3

Inception V3的改进主要有两方面:
①引入了factorization into small convolutions的思想,将一个较大的二维卷积拆分成两个较小的以为卷积,比如将7*7拆分成1*7和7*1卷积,一方面节约参数,加速运算,减少过拟合,同时增加了一层非线性扩展模型表达能力,这种非对称拆分比拆分成几个相同的卷积效果更明显,可以获得更多更丰富的空间特征,增加特征多样性。
浅述经典的4种卷积网络之(3)Google Inception Net
图2 将3*3拆分为1*3和3*1卷积
②Inception V3又花了inception module结构,现在inception module有35*35、17*17和8*8三种不同结构,这些只在网络的后部分出现,前部还是普通的卷积层。Inception V3不仅在inception module中使用分支,还在分支中使用分支(8*8结构中),可以说是network in network in network。
浅述经典的4种卷积网络之(3)Google Inception Net
浅述经典的4种卷积网络之(3)Google Inception Net](https://img-blog.csdn.net/20170929215931271?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVhbl96aXppemk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图3 inception V3中的三种结构的inception moudle
下面对于inception V3的网络结构参数进行分析:

layer type conv size/strides input size filter number output size filter type
conv1 3*3*3/2 299*299*3 32 149*149*32 valid
conv2 3*3*32/1 149*149*32 32 147*147*32 valid
conv3 3*3*32/1 147*147*32 64 147*147*64 same
max pooling1 3*3*32/2 147*147*64 64 73*73*64 valid
conv4 3*3*64/1 73*73*64 64 71*71*64 valid
conv5 3*3*80/2 80 71*71*80 192
conv6 3*3*192/1 35*35*192 288 35*35*288 same
inception modules1 3个inception module 35*35*288
inception modules2 5个inception module 17*17*768
inception modules3 3个inception module 8*8*1280
max pooling2 8*8*2048 8*8*2048 2048 1*1*2048
线性 logits 1*1*2048
softmax 分类输出 1*1*1000

(4)inception V4
相比V3结合了为微软的ResNet,在下一篇文章将主要讲解ResNet。
2.Google Inception Net网络tensorflow实现
啦啦啦~后续待进啦啦啦~


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
author-avatar
1234
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有