卷首语:
在上一篇文章中,我们探讨了关于“AlexNet”模型的结构与代码实现,相信大家已经对CNN的结构有了一定的了解。在本文中我们会讨论关于GoogleNet系列中的Inception-v1/v2模型的分析与实现,和从前的文章一样,力求精简,毫无门槛。
本文范围:
Inception-v1/v2系列案例分析与实现
Inception-v1
简介:在严格的意义上来讲,Inception-v1是属于GoogLeNet系列的,是早期向LeNet模型致敬的一款模型。
上图就是Inception-v1的结构示意图,我们可以看到在其中有很多连续的卷积和并列的卷积核(滤波器),还分别有三个输出层(就是当时在入门CNN文章中提到过的多输出结构)
此外:
Inception相较于AlexNet而言移除了两个全连接层,用平均池化来进行替代。
额外添加两个SoftMax避免梯度下降。(笔者看过很多相关的代码,发现很多的实例并不会使用这两层额外的作为辅助输出,具体的效果读者可以自行测试一下)
上图就是一个inception-v1的结构模块,在过去我们学习的CNN模型中都是将卷积核串联在一起,而Inception却是将其输出在通道上进行堆叠。其中1*1卷积核主要起到减少计算通道的作用。
Inception-v2
简介:Inception-v2在v1的基础上添加了BN层,将结构模块中的5*5卷积核改为两个3*3的卷积核,这样能既能减少网络中的参数,又能提高计算速度
[(5*5)/(3*3*2)=1.388888889 ]
框架版本:TensorFLow-1.5-GPU
如图和代码所示,模块共采取四个通道进行并行计算,传递的结果在第三通道(深度)处进行拼接输出。
但是,单单实现了传递过程还不能够,Inception-v2最值的一提的还是BN层,它可以避免频繁调试学习率而大幅度的提升模型的训练效率。
今天就到这里,下次我会带大家深入浅出——快速实现BN层算法,使你的模型也能够训练如飞!
记得添加关注哦!!
(未完待续)
注:本文原创,已售与“昂钛客AI”