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

 

 

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM