GAP (Global Average Pooling)可用于模型微調(diào),在做圖像分類比賽時(shí)效果較好.最早在<<Network In Network>>中提出.
在常見的卷積神經(jīng)網(wǎng)絡(luò)中,全連接層之前的卷積層負(fù)責(zé)對(duì)圖像進(jìn)行特征提取,在獲取特征后,傳統(tǒng)的方法是接上全連接層之后再進(jìn)行激活分類,而GAP的思路是使用GAP來替代該全連接層(即使用池化層的方式來降維),更重要的一點(diǎn)是保留了前面各個(gè)卷積層和池化層提取到的空間信息\語義信息,所以在實(shí)際應(yīng)用中效果提升也較為明顯!,另外,GAP去除了對(duì)輸入大小的限制!,而且在卷積可視化Grad-CAM中也有重要的應(yīng)用.
GAP直接從 feature map 的通道信息下手跟啤,比如我們現(xiàn)在的分類有N種齿兔,那么最后一層的卷積輸出的 feature map 就只有N個(gè)通道常遂,然后對(duì)這個(gè) feature map 進(jìn)行全局池化操作暑塑,獲得長(zhǎng)度為N的向量饲宿,這就相當(dāng)于直接賦予了每個(gè)通道類別的意義怀薛。
GAP層精居,通過減少模型中的參數(shù)總數(shù)來最小化過度擬合豌鸡。 與最大池層類似,GAP層用于減小三維張量的空間維度活箕。 然而力麸,GAP層執(zhí)行更極端類型的維數(shù)減少,其中尺寸為的張量的尺寸減小為具有的尺寸育韩。 GAP層通過簡(jiǎn)單地獲取所有值的平均值克蚂,將每個(gè)特征映射層減少為單個(gè)數(shù)字.
- 可以這樣使用GAP層,即GAP層之后是一個(gè)密集連接的層,其中softmax激活函數(shù)產(chǎn)生預(yù)測(cè)的對(duì)象類筋讨。
from keras.layers import GlobalAveragePooling2D,Dense
from keras.applications import VGG16
from keras.models import Model
def build_model():
base_model = VGG16(weights="imagenet",include_top=False)
#在分類器之前使用
gap = GlobalAveragePooling2D()(base_model)
predictions = Dense(20,activation="softmax")(gap)
model = Model(inputs=base_model.input,outputs=predictions)
return model