Inception模型和Residual模型卷积操作的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文档

 

 

 

    

posted on 2018-03-09 10:52  mitutao  阅读(3970)  评论(0编辑  收藏  举报

导航