天天看點

深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄

lecture 7:Network in Network(NIN)

目錄

  • lecture 7:Network in Network(NIN)
  • 目錄
    • 1、NIN結構
    • 2、MLP卷積層
    • 3、全局均值池化
    • 4、總體網絡架構
    • 5、NIN補充
      • 5.1廣義線性模型(GLM)的局限性
      • 5.2CCCP層
    • 6、1*1卷積的作用
    • 7、手勢識别RGB圖像——NIN結構

1、NIN結構

深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄
深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄

2、MLP卷積層

深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄
  • 傳統CNN的局部感受野視窗的運算,可以了解為一個單層的網絡。
  • MLPconv層是每個卷積的局部感受野中還包含了一個微型的多層網絡。
  • MLPconv采用多層網絡結構(一般3層)提高非線性,對每個局部感受野進行更加複雜的運算。

3、全局均值池化

深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄
深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄

4、總體網絡架構

1000物體分類:4層NIN+全局均值池化

深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄
深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄

5、NIN補充

5.1廣義線性模型(GLM)的局限性

  • 經典CNN中的卷積層就是用線性濾波器對圖像進行内積運算,在每個局部輸出後面跟着一個非線性的激活函數,最終得到的叫作特征圖。
  • 這種卷積濾波器是一種廣義線性模型。是以用CNN進行特征提取時,其實就隐含地假設了特征是線性可分的,可實際問題往往不是線性可分的。
  • GLM的抽象能力比較弱,比線性模型更有表達能力的非線性函數近似器(比如MLP,徑向基神經)
深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄

5.2CCCP層

MLPconv=CONV + MLP,因為conv是線性的,mlp是非線性的,mlp能夠得到更高的抽象,泛化能力更強。

跨通道時,mlpconv=卷積層 + 1×1卷積層,此時mlpconv層也叫cccp層

深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄
深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄
深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄

6、1*1卷積的作用

深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄

7、手勢識别RGB圖像——NIN結構

深度學習總結(lecture 7)Network in Network(NIN)lecture 7:Network in Network(NIN)目錄

收斂緩慢,且震蕩

加了一層softmax ,第一三塊後加了BatchNormalization,基本解決了

def NIN(input_shape=(,,), classes=):

    X_input = Input(input_shape)

    "block 1"
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='conv1')(X_input)
    X = BatchNormalization(axis=)(X)
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='cccp1')(X)
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='cccp2')(X)
    X = MaxPooling2D((,), strides=(,), name='maxpool1')(X)

    "block 2"
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='conv2')(X)
    X = BatchNormalization(axis=)(X)
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='cccp3')(X)
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='cccp4')(X)
    X = AveragePooling2D((,), strides=(,), name='maxpool2')(X)

    "block 3"
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='conv3')(X)
    X = BatchNormalization(axis=)(X)
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='cccp5')(X)
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='cccp6')(X)
    X = MaxPooling2D((,), strides=(,), name='maxpool3')(X)

    "block 4"
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='same',  activation='relu', name='conv4')(X)
    X = BatchNormalization(axis=)(X)
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='cccp7')(X)
    X = Conv2D(filters=, kernel_size=(,), strides=(,), padding='valid', activation='relu', name='cccp8')(X)
    X = AveragePooling2D((,), strides=(,), name='Avepool1')(X)

    "flatten"
    X = Flatten()(X)
    X = Dense(classes, activation='softmax', name='fc1')(X)

    model = Model(inputs=X_input, outputs=X, name='NIN')

    return model

           

繼續閱讀