理解深度学习中的Inception网络

背景

构建CNN时,你要决定卷积核的大小,是1x3合适,还是3x3合适,还是5x5合适?要不要添加pooling层?

做这些决定(很可能是通过grid search)很麻烦,对吧?

Inception网络的优点,就是能代替你做决定,酷吧!

Inecption层的基本思想

Inecption层Inecption网络中的基本结构。Inecption层的基本原理如下图:

这里写图片描述

Inecption层中,有多个卷积层结构(Conv)和Pooling结构(MaxPooling),它们利用了padding的原理,让经过这些结构的最终结果Shape不变。

  • C_1X1: 28x28x192的输入数据,与64个1x1的卷积核做卷积后,得到28x28x64的输出
  • C_3X3: 28x28x192的输入数据,与128个3x3的卷积核做卷积后,得到28x28x128的输出
  • C_5X5: 28x28x192的输入数据,与32个5x5的卷积核做卷积后,得到28x28x32的输出
  • MP: 28x28x192的输入数据,做MaxPooling后(带padding),得到28x28x32的输出

多个Inecption层组合在一起,就构成了Inecption网络。但这样直接计算,计算量很大,所以要利用1x1的卷积核,来降低计算量。

1x1的卷积如何降低计算量

考虑如下问题,经过这一次卷积后,计算量为多少?

  • 输入数据维度:28x28x192
  • 卷积核大小:5x5x32
  • 输出数据维度:28x28x32

输出数据共有28x28x32个值,每个值都要进行5x5x192次乘法(卷积中的)运算,所以一共要进行28x28x32x5x5x192次乘法计算,即120,422,400。

同样的问题,如果先经过1x1的卷积计算,再通过,如下图

  • 输入数据维度:28x28x192
  • 卷积核1大小:1x1x16
  • 卷积核2大小:5x5x32
  • 输出数据维度:28x28x32

这里写图片描述

经过第一个卷积层,要进行(28x28x16x1x1x192=2,408,448)次乘法计算,经过第二个卷积层,要进行(28x28x32x5x5x16=10,035,20)次乘法计算。总共计算次数也就是(2,408,448+10,035,20=12,443,648)次,比上面直接经过一个卷基层的计算量(120,422,400)要小很多。

可见,用好1x1的卷积核,就能降低计算量。

Inecption网络

带有1x1卷积核的Inecption层,就构成了Inecption网络的基本单元,如下图:

这里写图片描述

这样的多个Inecption层组合在一起,就构成了Inecption网络,如下图:

这里写图片描述

当然,实际论文中的Inecption网络还包括输出端的全连接层,还有Inecption网络会从中间层引出多个输出,再连接SoftMax,这样能减少过拟合(让中间层也起作用)。

这里写图片描述

总结

Inception‎是电影盗梦空间的名字,Google发明的Inception‎网络取名也是来自这个电影。

Inecption网络是由多个Inecption层组成的,它的最大优点是可以一定程度上帮你省去指定CNN卷积核大小和MP调优的工作。

猜你喜欢

转载自blog.csdn.net/ybdesire/article/details/80628586
今日推荐