破解北京pk10冠亚和值 1比0.95刷流水教程 pk10稳赚技巧方案 北京pk10怎么研究走势 北京pk赛车一天多少期 北京pk赛车历史记录 全天北京pk10赛车计划 北京pk10冠军单双技巧 北京pk两期免费计划 北京pk10冠军公式大全 pk10高手单期人工计划 北京pk10免费人工计划 pk10一天赚300好搞吗 北京pk10杀3码公式 app软件购买北京pk10 北京pk10每天开多少期 北京pk10精准一期计划 北京pk拾全天精准计划 二分pk10怎么玩 pk10怎么引诱别人玩 北京赛車pk10网站 北京pk2期计划在线网站 pk10前三跨度怎么算 赌场最怕什么样的赌法 北京pk赛车彩票官网 怎样控制自己每天赢500 北京pk10正规彩票网站 北京pk10前五1码计划 一无所有怎么白手起家 北京pk10去一尾图解

【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络GoogLeNet

时间:2019-01-15   来源:尚学堂   阅读:305

GoogLeNet是由google的Christian Szegedy等人在2014年的论文《Going Deeper with Convolutions》提出,其最大的亮点是提出一种叫Inception的结构,以此为基础构建GoogLeNet,并在当年的ImageNet分类和检测任务中获得第一,ps:GoogLeNet的取名是为了向YannLeCun的LeNet系列致?#30784;?/span>

(本系列所有代码均在github:https://github.com/huxiaoman7/PaddlePaddle_code)

关于深度网络的一些思考

在本系列最开始的几篇文章我们讲到了卷积神经网络,设计的网络结构也非常简单,属于浅层神经网络,如三层的卷积神经网络等,但是在层数比较少的时候,有时候效果往往并没有那么好,在实验过程中发现,当我们尝试增加网络的层数,或者增?#29992;?#19968;层网络的神经元个数的时候,对准确率有一定的提升,简单的说就是增加网络的深度与宽度,但这样做有两个明显的缺点:

  • 更深更宽的网络意味着更多的?#38382;?#25552;高了模型的复杂度,从而大大增加过拟合的风险,尤其在训练数据不是那么多或者某个label训练数据不足的情况下更容易发生;
  • 增加计算?#35797;?#30340;消?#27169;?#23454;?#26159;?#20917;下,?#36824;?#26159;因为数据稀疏还是扩充的网络结构利用不充分(?#28909;?#24456;多权重接近0),都会导致大量计算的浪费。

解决以上两个问题的基本方法是将全连接或卷积连接改为稀疏连接。?#36824;艽由?#29289;的角度还是机器学习的角度,稀疏性都有良好的表现,回想一下在讲AlexNet这一节提出的Dropout网络以及ReLU激活函数,其本质就是利用稀疏性提高模型泛化性(但需要计算的?#38382;?#27809;变少)。

简单解释下稀疏性,当整个特征空间是非线性甚至不连续时:

  • 学好局部空间的特征集更能提升性能,类似于Maxout网络中使用多个局部线?#38498;?#25968;的组合来拟合非线?#38498;?#25968;的思想;
  • 假设整个特征空间由N个不连续局部特征空间集合组成,任意一个样本会被?#25104;?#21040;这N个空间中并激活/不激活相应特征维度,如果用C1表示某类样本被激活的特征维度集合,用C2表示另一类样本的特征维度集合,当数据量?#36824;?#22823;时,要想增加特征区分度并很好的区分两类样本,就要降低C1和C2的重合度(?#28909;?#21487;用Jaccard距离衡量),?#27492;?#23567;C1和C2的大小,意味着相应的特征维度集会变稀疏。

?#36824;?#23604;尬的是,现在的计算机体系结构更善于稠密数据的计算,而在非均匀分布的稀疏数据上的计算效率极差,?#28909;?#31232;疏性会导致的缓存miss率极高,于是需要一种方法既能发挥稀疏网络的优势又能保证计算效率。好在前人做了大量实验(如《On Two-Dimensional Sparse Matrix Partitioning: Models, Methods, and a Recipe》),发现对稀疏矩阵做聚类得到相对稠密的子矩阵可以大幅提高稀疏矩阵乘法性能,借鉴这个思想,作者提出Inception的结构。

图1 Inception结构

  • 把不同大小卷积核抽象得到的特征空间看做子特征空间,每个子特征空间都是稀疏的,把这些不同尺度特征做融合,相当于得到一个相对稠密的空间;
  • 采用1×1、3×3、5×5卷积核(不是必须的,?#37096;?#20197;是其他大小),stride取1,利用padding可以方便的做输出特征维度对齐;
  • 大量事?#24403;?#26126;pooling层能有效提高卷积网络的效果,所以加了一条max pooling路径;
  • 这个结构符?#29616;?#35266;理解,视觉信息通过不同尺度的变换被聚合起来作为下一阶段的特征,?#28909;紓?#20154;的高矮、?#36136;蕁?#38738;老信息被聚合后做下一步判?#31232;?/span>

这个网络的最大问题是5×5卷积带来了巨大计算负担,例如,假设上层输入为:28×28×192:

  • 直接经过96个5×5卷积层(stride=1,padding=2)后,输出为:28×28×96,卷积层?#38382;?#37327;为:192×5×5×96=460800;
  • 借鉴NIN网络(Network in Network,后续会讲),在5×5卷积前使用32个1×1卷积核做维?#20154;?#20943;,变成28×28×32,之后经过96个5×5卷积层(stride=1,padding=2)后,输出为:28×28×96,但所有卷积层的?#38382;?#37327;为:192×1×1×32+32×5×5×96=82944,可见整个?#38382;?#37327;是原来的1/5.5,且效果上没有多少损失。

    新网络结构为

图2 新Inception结构

GoogLeNet网络结构

利用上述Inception模块构建GoogLeNet,实验表明Inception模块出现在高层特征抽象时会更加有效(我理解由于其结构特点,更适合提取高阶特征,让它提取低阶特征会导致特征信息丢失),所以在低层依然使用传统卷积层。整个网路结构如下:

图3 GoogLeNet网络结构

图4 GoogLeNet详细网络结构示意图

网络?#24471;鰨?/span>

  • 所有卷积层均使用ReLU激活函数,包括做了1×1卷积降维后的激活;
  • 移除全连接层,像NIN一样使用Global Average Pooling,使得Top 1准确率提高0.6%,但由于GAP与类别数目有关系,为了方便大家做模型fine-tuning,最后加了一个全连接层;
  • 与前面的ResNet类似,实验观察到,相对浅层的神经网络层对模型效果有较大的?#27605;祝?#35757;练阶段通过对Inception(4a、4d)增加两个额外的分类器来增强反向传播时的梯度信号,但最重要的还是正则化作用,这一点在GoogLeNet v3中得到实验证实,并间接证实了GoogLeNet V2中BN的正则化作用,这两个分类器的loss会以0.3的权重加在整体loss上,在模型inference阶段,这两个分类器会被去掉;
  • 用于降维的1×1卷积核个数为128个;
  • 全连接层使用1024个神经元;
  • 使用丢弃概率为0.7的Dropout层;

网络结构详细?#24471;鰨?/span>

输入数据为224×224×3的RGB图像,图中"S"代表做same-padding,"V"代表不做。

  • C1卷积层:64个7×7卷积核(stride=2,padding=3),输出为:112×112×64;
  • P1抽样层:64个3×3卷积核(stride=2),输出为56×56×64,其中:56=(112-3+1)/2+1
  • C2卷积层:192个3×3卷积核(stride=1,padding=1),输出为:56×56×192;
  • P2抽样层:192个3×3卷积核(stride=2),输出为28×28×192,其中:28=(56-3+1)/2+1,接着数据被分出4个?#31181;В?#36827;入Inception (3a)
  • Inception (3a):由4部分组成
    • 64个1×1的卷积核,输出为28×28×64;
    • 96个1×1的卷积核做降维,输出为28×28×96,之后128个3×3卷积核(stride=1,padding=1),输出为:28×28×128
    • 16个1×1的卷积核做降维,输出为28×28×16,之后32个5×5卷积核(stride=1,padding=2),输出为:28×28×32
    • 192个3×3卷积核(stride=1,padding=1),输出为28×28×192,进行32个1×1卷积核,输出为:28×28×32

      最后对4个?#31181;?#30340;输出做“深?#21462;?#26041;向组合,得到输出28×28×256,接着数据被分出4个?#31181;В?#36827;入Inception (3b);

  • Inception (3b):由4部分组成
    • 128个1×1的卷积核,输出为28×28×128;
    • 128个1×1的卷积核做降维,输出为28×28×128,进行192个3×3卷积核(stride=1,padding=1),输出为:28×28×192
    • 32个1×1的卷积核做降维,输出为28×28×32,进行96个5×5卷积核(stride=1,padding=2),输出为:28×28×96
    • 256个3×3卷积核(stride=1,padding=1),输出为28×28×256,进行64个1×1卷积核,输出为:28×28×64

      最后对4个?#31181;?#30340;输出做“深?#21462;?#26041;向组合,得到输出28×28×480;

      后面结构以此类推。

用PaddlePaddle实现GoogLeNet

1.网络结构googlenet.py

在PaddlePaddle的models下面,有关于GoogLeNet的实现代码,大家可以直接学习拿来跑一下:

 

2.训练模型

 

3.运行方式

1 python train.py googlenet

其中最后的googlenet是可选的网络模型,输入其他的网络模型,如alexnet、vgg3、vgg6等就可以用不同的网络结构来训练了。

用Tensorflow实现GoogLeNet

tensorflow的实现在models里有非常详细的代码,这里就不全部贴出来了,大家可以在models/research/slim/nets/里详细看看,关于InceptionV1~InceptionV4的实现都有。

ps:这里的slim不是tensorflow的contrib下的slim,是models下的slim,别弄混了,slim可以理解为Tensorflow的一个高阶api,在构建这些复杂的网络结构时,可以直接调用slim封装好的网络结构就可以了,而不需要从头开始写整个网络结构。关于slim的详细大家可以在网上搜索,非常方便。

 

总结

其实GoogLeNet的最关键的一点就是提出了Inception结构,这有个什么好处呢,原来你想要提高准确率,需要?#35757;?#26356;深的层,增?#30001;?#32463;元个数等,?#35757;?#21040;一定层可能结果的准确率就提不上去了,因为?#38382;?#26356;多了啊,模型更复杂,更容易过拟合了,但是在实验中转向了更稀疏但是更精密的结构同样可以达到很好的效果,?#24471;?#25105;们可以照着这个思路走,继续做,所以后面会有InceptionV2,V3,V4等,它表现的结果也非常好。给我们传统的通过?#35757;?#23618;提高准确率的想法提供了一个新的思路。

相关资讯

  • ?#26412;?#26657;区
  • 山西校区
  • 郑州校区
  • 武汉校区
  • 四川校区
  • 长沙校区
  • 深圳校区
  • 上海校区
  • 广州校区
  • 保定招生办

?#26412;?#28023;淀区校区(总部):?#26412;?#24066;海淀区西三旗街道建?#26576;?#35199;?#20998;?#33150;建华商务大厦东侧二层尚学堂
?#26412;?#20140;南校区:?#26412;?#20134;庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
咨询电话:400-009-1906 / 010-56233821
面授课程: JavaEE培训大数据就业班培训大数据云计算周末班培训零基础大数据连读班培训大数据云计算高手班培训人工智能周末班培训人工智能+Python全栈培训H5+PHP全栈工程师培训

山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702

郑州学区地址?#27721;幽系繾由?#21153;产业园6号楼4层407
咨询电话:0371-55177956

武汉学区地址?#27721;?#21271;省武汉?#34218;?#22799;区江夏大道26号 宏信悦谷创业园4楼
咨询电话:027-87989193

四川学区地址:成?#38469;?#39640;新区锦晖西一街99号布鲁明顿大厦2栋1003室
咨询电话:028-65176856 / 13880900114

网址:http://www.cssxt.com/
咨询电话:0731-83072091

深圳校区地址:深圳市宝安区航城街道航城大道航城创新创业园A4栋210(固戍地铁站C出口)
咨询电话:0755-23061965 / 18898413781

上海尚学堂?#23665;?#26657;区地址:上海市?#23665;?#21306;荣乐东路2369弄45号绿地伯顿大厦2层
咨询电话:021-67690939

广州校区地址:广州市天河区元岗横路31号慧通产业广场B区B1栋6楼尚学堂(地铁3号线或6号线到“天河客运站”D出口,右拐直走约800米)
咨询电话:020-2989 6995

保定招生办公室

地址?#27721;?#21271;省保定市竞秀区朝阳南大街777号鸿悦国际1101室

电话:15132423123

Copyright 2006-2019 ?#26412;?#23578;学堂科技有限公司  京ICP备13018289号-19  京公网安备11010802015183  
媒体联系:18610174079 ?#35780;?#24072;  
pk10单双最好方法