我從包含Keras應用程序的VGG16模型中抽取低級特徵。這些功能作爲附加分類器的預先訓練的輸入數據的單獨輸出而導出。概念想法是從Multi-scale recognition with DAG-CNNsKeras VGG16低級特徵提取
使用沒有分類器頂部的模型,使用Flatten()
:block_05 = Flatten(name='block_05')(block5_pool)
從block_5提取層提取最高級別的要素。這給出了一個尺寸爲8192的輸出向量。Flatten()
,但是在較低的拉伸層上不起作用,因爲尺寸太大(內存問題)。可以使用GlobalAveragePooling2D()
:block_04 = GlobalAveragePooling2D(name='block_04')(block4_pool)
來提取較低的提取層(或任何其他層)。然而,這種方法的問題在於,特徵向量的維度隨着你走低而迅速減小:block_4(512),block_3(256),block_2(128),block_1(64)。
什麼是合適的圖層或設置以保留來自更深層的更多特徵數據?
有關信息,模型的輸出如下所示,附加分類器具有相應數量的輸入。
# Create model, output data in reverse order from top to bottom
model = Model(input=img_input, output=[block_05, # ch_00, layer 17, dim 8192
block_04, # ch_01, layer 13, dim 512
block_03, # ch_02, layer 9, dim 256
block_02, # ch_03, layer 5, dim 128
block_01]) # ch_04, layer 2, dim 64
這個有趣的方法。你能否更詳細地解釋你想如何使用這些較低層的功能? –
參考出版物更新後。合併輸出是在單獨的分類器(作爲輸入)中完成的,因爲然後可以在預處理的輸入上運行優化以查看哪些特徵層爲模型增加最多。 – jdelange