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