inception模型和卷积层的残差连接的keras实现

Posted mitutao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了inception模型和卷积层的残差连接的keras实现相关的知识,希望对你有一定的参考价值。

     Inception模型和Residual残差模型是卷积神经网络中对卷积升级的两个操作。

一、  Inception模型(by google)

     这个模型的trick是将大卷积核变成小卷积核,将多个卷积核的运算结果进行连接,充分利用多尺度信息,这也体现了这篇文章的标题

    Going Deeper with Convolutions。更加深的卷积操作。

     废话不多说,上图

      注意输入层在底部,输出层在顶部。废话不多说,上keras代码。

 

 1 from keras.layers import Conv2D, MaxPooling2D, Input
 2 
 3 input_img = Input(shape=(256, 256, 3))
 4 
 5 tower_1 = Conv2D(64, (1, 1), padding=\'same\', activation=\'relu\')(input_img)
 6 tower_1 = Conv2D(64, (3, 3), padding=\'same\', activation=\'relu\')(tower_1)
 7 
 8 tower_2 = Conv2D(64, (1, 1), padding=\'same\', activation=\'relu\')(input_img)
 9 tower_2 = Conv2D(64, (5, 5), padding=\'same\', activation=\'relu\')(tower_2)
10 
11 tower_3 = MaxPooling2D((3, 3), strides=(1, 1), padding=\'same\')(input_img)
12 tower_3 = Conv2D(64, (1, 1), padding=\'same\', activation=\'relu\')(tower_3)
13 
14 output = keras.layers.concatenate([tower_1, tower_2, tower_3], axis=1)
最后的concatenate是核心,其实就是连接在一起,比如两列向量和两列向量,连接成四列向量即可。

二、  Residual模型(by microsoft)

这个模型的trick是将进行了一种跨连接操作,将特征跨过一定的操作后在后面进行求和。这个意义一个是减轻梯度消失,
还有个目的其实让后续的卷积结果变得越来越强。DenseNet 其实也是这种思想。

废话不多说,上图

 

         

          从上图看,输出的结果就是X+F(X) 直接相加,逐个元素对应相加,而不是连接。F(X) 是什么呢? 看下图

         

          F(X)实际上就是一个或者多个卷积操作,非常简单直观。废话不多说,上keras代码。下面代码只演示了一个卷积操作。

 

1 from keras.layers import Conv2D, Input
2 
3 # input tensor for a 3-channel 256x256 image
4 x = Input(shape=(256, 256, 3))
5 # 3x3 conv with 3 output channels (same as input channels)
6 y = Conv2D(3, (3, 3), padding=\'same\')(x)
7 # this returns x + y.
8 z = keras.layers.add([x, y])

         以上,就是现在目前最最有效的两种卷积升级操作的keras实现。

参考文献:

      Keras文档

 

 

 

    

以上是关于inception模型和卷积层的残差连接的keras实现的主要内容,如果未能解决你的问题,请参考以下文章

keras模型中卷积层的可视化

卷积神经网络

在 Keras 中连接之前调整卷积层的大小

Keras:微调 Inception 时精度下降

第62篇Inception-v4

吴教授的CNN课堂:进阶 从LeNet到残差网络(ResNet)和Inception Net