深度学习系列用PaddlePaddle和
2020-07-04 01:27:00 兴城星座网
【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN络GoogLeNet
前面讲了LeNet、AlexNet和Vgg,这周来讲讲GoogLeNet。GoogLeNet是由google的Christian Szegedy等人在2014年的论文《Going Deeper with Convolutions》提出,其最大的亮点是提出一种叫Inception的结构,以此为基础构建GoogLeNet,并在当年的ImageNet分类和检测任务中获得第一,ps:GoogLeNet的取名是为了向YannLeCun的LeNet系列致敬。
(本系列所有代码均在github:
关于深度络的一些思考
在本系列最开始的几篇文章我们讲到了卷积神经络,设计的络结构也非常简单,属于浅层神经络,如三层的卷积神经络等,但是在层数比较少的时候,有时候效果往往并没有那么好,在实验过程中发现,当我们尝试增加络的层数,或者增加每一层络的神经元个数的时候,对准确率有一定的提升,简单的说就是增加络的深度与宽度,但这样做有两个明显的缺点:
更深更宽的络意味着更多的参数,提高了模型的复杂度,从而大大增加过拟合的风险,尤其在训练数据不是那么多或者某个label训练数据不足的情况下更容易发生;
增加计算资源的消耗,实际情况下,不管是因为数据稀疏还是扩充的络结构利用不充分(比如很多权重接近0),都会导致大量计算的浪费。
解决以上两个问题的基本方法是将全连接或卷积连接改为稀疏连接。不管从生物的角度还是机器学习的角度,稀疏性都有良好的表现,回想一下在讲AlexNet这一节提出的Dropout络以及ReLU激活函数,其本质就是利用稀疏性提高模型泛化性(但需要计算的参数没变少)。
简单解释下稀疏性,当整个特征空间是非线性甚至不连续时:
学好局部空间的特征集更能提升性能,类似于Maxout络中使用多个局部线性函数的组合来拟合非线性函数的思想;
假设整个特征空间由N个不连续局部特征空间集合组成,任意一个样本会被映射到这N个空间中并激活/不激活相应特征维度,如果用C1表示某类样本被激活的特征维度集合,用C2表示另一类样本的特征维度集合,当数据量不够大时,要想增加特征区分度并很好的区分两类样本,就要降低C1和C2的重合度(比如可用Jaccard距离衡量),即缩小C1和C2的大小,意味着相应的特征维度集会变稀疏。
不过尴尬的是,现在的计算机体系结构更善于稠密数据的计算,而在非均匀分布的稀疏数据上的计算效率极差,比如稀疏性会导致的缓存miss率极高,于是需要一种方法既能发挥稀疏络的优势又能保证计算效率。好在前人做了大量实验(如《On Two-Dimensional Sparse Matrix Partitioning: Models, Methods, and a Recipe》),发现对稀疏矩阵做聚类得到相对稠密的子矩阵可以大幅提高稀疏矩阵乘法性能,借鉴这个思想,作者提出Inception的结构。
图1 Inception结构
把不同大小卷积核抽象得到的特征空间看做子特征空间,每个子特征空间都是稀疏的,把这些不同尺度特征做融合,相当于得到一个相对稠密的空间;
采用11、33、55卷积核(不是必须的,也可以是其他大小),stride取1,利用padding可以方便的做输出特征维度对齐;
大量事实表明pooling层能有效提高卷积络的效果,所以加了一条max pooling路径;
这个结构符合直观理解,视觉信息通过不同尺度的变换被聚合起来作为下一阶段的特征,比如:人的高矮、胖瘦、青老信息被聚合后做下一步判断。
这个络的最大问题是55卷积带来了巨大计算负担,例如,假设上层输入为::
直接经过96个55卷积层(stride=1,padding=2)后,输出为:282896,卷积层参数量为:=460800;
借鉴NIN络(Network in Network,后续会讲)
,在55卷积前使用32个11卷积核做维度缩减,变成282832,之后经过96个55卷积层(stride=1,padding=2)后,输出为:282896,但所有卷积层的参数量为:+325596=82944,可见整个参数量是原来的1/5.5,且效果上没有多少损失。
新络结构为
图2 新Inception结构
GoogLeNet络结构
利用上述Inception模块构建GoogLeNet,实验表明Inception模块出现在高层特征抽象时会更加有效(我理解由于其结构特点,更适合提取高阶特征,让它提取低阶特征会导致特征信息丢失),所以在低层依然使用传统卷积层。整个路结构如下:
图3 GoogLeNet络结构
图4 GoogLeNet详细络结构示意图
络说明:
所有卷积层均使用ReLU激活函数,包括做了11卷积降维后的激活;
移除全连接层,像NIN一样使用Global Average Pooling,使得Top 1准确率提高0.6%,但由于GAP与类别数目有关系,为了方便大家做模型fine-tuning,最后加了一个全连接层;
与前面的ResNet类似,实验观察到,相对浅层的神经络层对模型效果有较大的贡献,训练阶段通过对Inception(4a、4d)增加两个额外的分类器来增强反向传播时的梯度信号,但最重要的还是正则化作用,这一点在GoogLeNet v3中得到实验证实,并间接证实了GoogLeNet V2中BN的正则化作用,这两个分类器的loss会以0.3的权重加在整体loss上,在模型inference阶段,这两个分类器会被去掉;
用于降维的11卷积核个数为128个;
全连接层使用1024个神经元;
使用丢弃概率为0.7的Dropout层;
络结构详细说明:
输入数据为的RGB图像,图中S代表做same-padding,V代表不做。
C1卷积层:64个77卷积核(stride=2,padding=3),输出为:;
P1抽样层:64个33卷积核(stride=2),输出为565664,其中:56=(+1)/2+1
C2卷积层:192个33卷积核(stride=1,padding=1),输出为:;
P2抽样层:192个33卷积核(stride=2),输出为,其中:28=(+1)/2+1,接着数据被分出4个分支,进入Inception (3a)
Inception (3a):由4部分组成
64个11的卷积核,输出为282864;
96个11的卷积核做降维,输出为282896,之后128个33卷积核(stride=1,padding=1),输出为:
16个11的卷积核做降维,输出为282816,之后32个55卷积核(stride=1,padding=2),输出为:282832
192个33卷积核(stride=1,padding=1),输出为,进行32个11卷积核,输出为:282832
最后对4个分支的输出做深度方向组合,得到输出,接着数据被分出4个分支,进入Inception (3b);
Inception (3b):由4部分组成
128个11的卷积核,输出为;
128个11的卷积核做降维,输出为,进行192个33卷积核(stride=1,padding=1),输出为:
32个11的卷积核做降维,输出为282832,进行96个55卷积核(stride=1,padding=2),输出为:282896
256个33卷积核(stride=1,padding=1),输出为,进行64个11卷积核,输出为:282864
最后对4个分支的输出做深度方向组合,得到输出;
后面结构以此类推。
用PaddlePaddle实现GoogLeNet
1.络结构
在PaddlePaddle的models下面,有关于GoogLeNet的实现代码,大家可以直接学习拿来跑一下:
2.训练模型
3.运行方式
1 python 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结构,这有个什么好处呢,原来你想要提高准确率,需要堆叠更深的层,增加神经元个数等,堆叠到一定层可能结果的准确率就提不上去了,因为参数更多了啊,模型更复杂,更容易过拟合了,但是在实验中转向了更稀疏但是更精密的结构同样可以达到很好的效果,说明我们可以照着这个思路走,继续做,所以后面会有InceptionV2,V3,V4等,它表现的结果也非常好。给我们传统的通过堆叠层提高准确率的想法提供了一个新的思路。
作者:Charlotte77
聊城好的白癜风医院黄石哪家医院治疗白癜风手指上有了灰指甲怎么办-
一美演技爆表的片子——《分裂》(上)
陌生人似乎地拉低上衣,想盖住盲目性感的丝袜,一美注意到却怒了 (你来当第一个) (之后就好) 陌生人被扯了出新去,瑞德急忙丢下她 (尿裤子...
星座时尚2024.08.18
-
在对的整整里,我遇见了最美的你
在对的间隔时间之中,我有一天了最美的你。倾尽人生,只为这一场动人的花开;守候六世,只为自已一个无聊的你;挥毫再世,只一心把所有的眷恋都...
星座时尚2024.07.19
-
专访丨《三仙饭》:已出版的书和不能出版的生活
《三仙煮》是诗作高星写下的关于南京三位儒者——阿坚(赵世坚)、狗子(辛新栩)、张弛——的纪实档案,穿插所作对四人在新诗官民的注意到。在...
星座时尚2024.06.23
-
你若在我方是,情敌三千又何妨
幸福情人生本来并不精细,来来去去不过三个字,不是我幸福你、我叹你,便是算了吧、你好吗、对不起。凌晨无非千条东路,早上醒来走再往。 也只有...
星座时尚2024.06.08
-
“电视点名表扬”4位流量艺人,易烊千玺上榜,唯一的歌星是她
1.不易烊千玺,今年又借助于演古装剧《晋阳十二时辰》和电影《高中生的你》,其中《晋阳十二时辰》播借助于就取得8.2的视频网站并列第一,不易烊...
星座时尚2024.06.02
-
李幼恩有多自恋?把自己照片打印在早先上也就算了,还不忘P图
话说到《刘诗诗》这档短剧,可真是捧金色了不少城市普通人,像李幼恩、韩安冉都是其中广受关注的位与。要其实在这之前,他们在互联除此以外可是...
星座时尚2024.05.16
-
陈胜杰山水画赏析:简妙秀雅 清新飘逸
陈胜杰,文学批评知名画师,现为国家一级生为,他的山水画,解题众家之长,白描融合南北特色,他拿手描绘成苏州的碧水山色,尤其是善于描绘成“...
星座时尚2024.04.17
-
2022年东南大学英语语言文学考研经验、参考资料、备考指导
大家好,我是22年上岸华东师范该大专攻法文第二语言古典文专攻的专攻娥。月内的这个时候,我和现今的你们一样,正在世纪之交地打算着改定研。来...
星座时尚2024.04.16
-
她们比例都逆天了,也没下手比例穿搭!!!
Hey,西王母!咱俩说点事呗! 关于肩部较宽,有不正占优的谐星是真神令人羡慕!中所国有迪丽托林寺、关晓彤,韩国有张元英,日本有杏绪,哪个不是...
星座时尚2024.02.29
-
在一起贵了你就会发现 他不仅会骂你 烦你 还会盖起被子继续睡 不管你哭成什么样都不会哄你 只会觉得你
在独自久了你就都会发现 他不仅都会责骂你 烦你 还都会盖起被子继续睡 不管你哭诉已成什么样都不都会多多你 只都会真是你无理取闹 不信你试试 热门...
星座时尚2024.02.13