2017-10-11 246 views
0

我在互聯網上看到過很多關於如何微調VGG16和InceptionV3的例子。例如,有些人在微調VGG16時會將前25層設置爲凍結。對於InceptionV3,前172層將被凍結。但是,如何resnet?當我們做微調的時候,我們會凍結一些底層模型,如下:如何用resnet50模型進行微調?

from keras.applications.resnet50 import ResNet50 

base_model = ResNet50(include_top=False, weights="imagenet", input_shape=(input_dim, input_dim, channels)) 

.............. 

for layer in base_model.layers[:frozen_layers]: 
    layer.trainable = False 

那麼應該如何設置frozen_layers?實際上我不知道應該用VGG16,VGG19,ResNet50,InceptionV3等進行微調時,我應該設置多少層。任何人都可以給我關於如何微調這些模型的建議嗎?特別是當用這些模型進行微調時,有多少人會凍結?

+0

我也聽說如果我們只訓練我們自己的密集層,這就是所謂的轉移學習。如果我們用小的學習速度在base_model中訓練一些圖層(如resnet,vgg .etc),則稱爲微調。我知道卷積塊有一些特殊的含義,那麼如何凍結基本模型中的圖層以便進行微調? –

+0

我在這個博客上看到這些:[building-powerful-image-classification-models-using-very-little-data](https://blog.keras.io/building-powerful-image-classification-models-using- very-little-data.html) –

回答

0

這就是好奇....的VGG16模型共有23層......(https://github.com/fchollet/keras/blob/master/keras/applications/vgg16.py


所有這些模型也有類似的strucutre:

  • 一系列卷積的其次幾個緻密層的層

這幾個緻密層一請問什麼是keras電話top。 (如在include_top參數中)。

通常,這種微調只發生在最後的密集層。你讓卷積層(理解圖像和定位特徵)不改變他們的工作,並創建適合你個人課程的頂部。

人們經常創造自己的頂級部分,因爲他們沒有完全相同的原始模型訓練到的類。所以他們適應最後的部分,只訓練最後的部分。

所以,你創建一個模型include_top=False,然後你完全凍結它。
現在你添加自己的密集層,並留下這些可訓練的。

這是這些模型最常見的改編。

對於其他類型的微調,可能沒有明確的規則。

+0

對不起vgg的錯誤。我的意思是人們會凍結vgg網絡,除了最後一個卷積塊以便更適應他們自己的數據,然後調整最後的卷積塊以及具有小學習率的密集層,如下所示:[vgg16 fine -tuning](https://blog.keras.io/img/imgclf/vgg16_modified.png) –