TensorFlow实现Inception系列结构

卷首语:

在上一篇文章中,我们探讨了关于“AlexNet”模型的结构与代码实现,相信大家已经对CNN的结构有了一定的了解。在本文中我们会讨论关于GoogleNet系列中的Inception-v1/v2模型的分析与实现,和从前的文章一样,力求精简,毫无门槛。

本文范围:

Inception-v1/v2系列案例分析与实现

Inception-v1

简介:在严格的意义上来讲,Inception-v1是属于GoogLeNet系列的,是早期向LeNet模型致敬的一款模型。

Inception结构

上图就是Inception-v1的结构示意图,我们可以看到在其中有很多连续的卷积和并列的卷积核(滤波器),还分别有三个输出层(就是当时在入门CNN文章中提到过的多输出结构

此外:

Inception相较于AlexNet而言移除了两个全连接层,用平均池化来进行替代。

额外添加两个SoftMax避免梯度下降。(笔者看过很多相关的代码,发现很多的实例并不会使用这两层额外的作为辅助输出,具体的效果读者可以自行测试一下

        上图就是一个inception-v1的结构模块,在过去我们学习的CNN模型中都是将卷积核串联在一起,而Inception却是将其输出在通道上进行堆叠。其中1*1卷积核主要起到减少计算通道的作用。

Inception-v2

简介:Inception-v2v1的基础上添加了BN层,将结构模块中的5*5卷积核改为两个3*3的卷积核,这样能既能减少网络中的参数,又能提高计算速度

[(5*5)/3*3*2=1.388888889 ]

图为改进后的Inception结构模块,总体结构没有改变,这样我们就可以进行一些代码的相关实践

框架版本:TensorFLow-1.5-GPU

代码实现

如图和代码所示,模块共采取四个通道进行并行计算,传递的结果在第三通道(深度)处进行拼接输出。

但是,单单实现了传递过程还不能够,Inception-v2最值的一提的还是BN层,它可以避免频繁调试学习率而大幅度的提升模型的训练效率。

今天就到这里,下次我会带大家深入浅出——快速实现BN层算法,使你的模型也能够训练如飞!

记得添加关注哦!!

(未完待续)

注:本文原创,已售与“昂钛客AI”

你可能感兴趣的:(TensorFlow实现Inception系列结构)