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結構

2、MLP卷積層
- 傳統CNN的局部感受野視窗的運算,可以了解為一個單層的網絡。
- MLPconv層是每個卷積的局部感受野中還包含了一個微型的多層網絡。
- MLPconv采用多層網絡結構(一般3層)提高非線性,對每個局部感受野進行更加複雜的運算。
3、全局均值池化
4、總體網絡架構
1000物體分類:4層NIN+全局均值池化
5、NIN補充
5.1廣義線性模型(GLM)的局限性
- 經典CNN中的卷積層就是用線性濾波器對圖像進行内積運算,在每個局部輸出後面跟着一個非線性的激活函數,最終得到的叫作特征圖。
- 這種卷積濾波器是一種廣義線性模型。是以用CNN進行特征提取時,其實就隐含地假設了特征是線性可分的,可實際問題往往不是線性可分的。
- GLM的抽象能力比較弱,比線性模型更有表達能力的非線性函數近似器(比如MLP,徑向基神經)
5.2CCCP層
MLPconv=CONV + MLP,因為conv是線性的,mlp是非線性的,mlp能夠得到更高的抽象,泛化能力更強。
跨通道時,mlpconv=卷積層 + 1×1卷積層,此時mlpconv層也叫cccp層
6、1*1卷積的作用
7、手勢識别RGB圖像——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