簡體   English   中英

如何使用 Keras 的深度學習模型解決不適合 imagenet 數據集的問題?

[英]How to use Deep Learning Models from Keras for a problem that does not fit imagenet dataset?

我關注了一篇關於如何從頭開始實現 vgg16 模型的博客,並希望對來自 Keras 的預訓練 model 做同樣的事情。 我查閱了其他一些博客,但找不到我認為合適的解決方案。 我的任務是將集成電路圖像分類為缺陷或非缺陷。

我在一篇論文中看到他們使用 vgg16 的預訓練 imagenet model 進行織物缺陷檢測,他們凍結了前七層並針對自己的問題微調了后九層。 (來源: https://journals.sagepub.com/doi/full/10.1177/1558925019897396

我已經看到了有關如何凍結除完全連接層之外的所有層的示例,但是如何嘗試凍結前 x 層並針對我的問題微調其他層的示例?

VGG16 從頭開始實現相當容易,但對於 resnet 或 xception 等模型來說,它變得有點棘手。

沒有必要從頭開始實現 model 來凍結幾層。 您也可以在預訓練模型上執行此操作。 在 keras 中,您將使用 trainable trainable = False

例如,假設您想使用來自 keras 的預訓練 Xception model 並想凍結前 x 層:

#In your includes
from keras.applications import Xception

#Since you're using the model for a different task, you'd want to remove the top
base_model = Xception(weights='imagenet', include_top=False)

#Freeze layers 0 to x
for layer in base_model.layers[0:x]:
    layer.trainable = False

#To see all the layers in detail and to check trainable parameters
base_model.summary()

理想情況下,您希望在此 model 之上添加另一層,並將 output 作為您的類。 有關更多詳細信息,您可以查看此 keras 指南: https://keras.io/guides/transfer_learning/

很多時候,預訓練的權重在其他分類任務中非常有用,但如果您想在數據集上從頭開始訓練 model,您可以在沒有 imagenet 權重的情況下加載 model。 或者更好的是,加載權重但不要凍結任何層。 這將重新訓練每一層,將 imagenet 權重作為初始化。

我希望我已經回答了你的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM