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文档