當前位置:
首頁 > 知識 > 基於 Keras 對深度學習模型進行微調的全面指南 Part 2

基於 Keras 對深度學習模型進行微調的全面指南 Part 2

本文為AI研習社編譯的技術博客,原標題 A Comprehensive guide to Fine-tuningDeep Learning Models in Keras (Part II),作者為 Felix Yu 。

翻譯 | 霍曉燕 校對 | 楊東旭 整理 | 餘杭

本部分屬該兩部系列中的第二部分,該系列涵蓋了基於 Keras 對深度學習模型的微調。第一部分闡述微調背後的動機和原理,並簡要介紹常用的做法和技巧。本部分將詳細地指導如何在 Keras 中實現對流行模型 VGG,Inception 和 ResNet 的微調。

為什麼選擇 Keras ?

Keras 是建立在 Theano 或 TensorFlow 之上的一個極簡的神經網路庫。該庫允許開發人員快速地將想法原型化。除非你正在做一些涉及制定具有截然不同的激活機制的神經架構的前沿研究,否則 Keras 將提供構建相當複雜的神經網路所需的所有構建模塊。

同時附帶了大量的文檔和在線資源。


硬體說明

我強烈建議在涉及繁重計算的Covnet訓練時,使用GPU加速。速度差異相當大,我們談論的 GPU 大約幾小時而 CPU 需要幾天。

我推薦使用 GTX 980 Ti 或者有點貴的 GTX 1080,它售價約 600 美元。

Keras 微調

我已經實現了基於 Keras 的微調啟動腳本,這些腳本存放在這個 github 頁面中。包括 VGG16,VGG19,GoogleLeNet,nception-V3 和 ResNet50 的實現。這樣,你就可以為自己的微調任務定製腳本。

下面是如何使用腳本微調 VGG16 和 Inception-V3 模型的詳細演練。


VGG16 微調

VGG16 是牛津大學視覺幾何組(VGG)在 2014 年 ILVRC(ImageNet)競賽中使用的 16 層卷積神經網路。該模型在驗證集上達到了 7.5% 的前 5 錯誤率,這使得他們在競賽中獲得了第二名。

VGG16 模型示意圖:

可以在 vgg16.py 中找到用於微調 VGG16 的腳本。vgg_std16_model 函數的第一部分是 VGG 模型的結構。定義全連接層之後,我們通過下面一行將 ImageNet 預訓練權重載入到模型中:

為了進行微調,我們截斷了原始的 softmax 層,並使用下面一段我們自己的代碼替換:

最後一行的 num_class 變數代表我們分類任務中的類別標籤的數量。

有時,我們希望凍結前幾層的權重,使它們在整個微調過程中保持不變。假設我們想凍結前 10 層的權重,可以通過以下幾行代碼來完成:

然後,我們通過使用隨機梯度下降 (SGD) 演算法最小化交叉熵損失函數來微調模型。注意:我們使用的初始學習率為 0.001,小於從頭開始訓練的模型學習率(通常為 0.01)。

img_rows,img_cols 和 channel 定義輸入的維度。對於解析度為 224×224 的彩色圖像,img_rows=img_cols=224,channel=3。

接下來,我們載入數據集,將其拆分為訓練集和測試集,然後開始微調模型:

微調過程需要一段時間,具體取決於你的硬體。完成後,我們使用模型對驗證集進行預測,並且返回交叉熵損失函數的分數。

Inception-V3 微調。 Inception-V3 在 2015 年 ImageNet 競賽中獲得第二名,驗證集上的前 5 個錯誤率為 5.6%。

該模型的特點是使用了Inception模塊,它是由不同維度的內核生產的特徵映射的串聯。

27 層 Inception-V1 模型示意圖(類似於 V3 的想法):

用於微調 Inception-V3 的代碼可以在 inception_v3.py 中找到。這個過程與 VGG16 很相似,但有細微差別。由於Inception模塊分支需要合併,Inception-V3 不使用 Keras 的序列模型,因此我們不能簡單地使用 model.pop() 截斷頂層。

取而代之的是,在創建模型並載入 ImageNet 權重之後,我們通過在最後一個起始模塊(X)上定義另一個全連接的 softmax(x_newfc) 來執行等效於頂層截斷。這使用以下代碼來完成:

這就是 Inception-V3。可以在此處找到其他模型(如 VGG19,GoogleLeNet 和 ResNet)。


網路微調操作

如果你是深度學習或者計算機視覺的從業人員,很可能你已經嘗試過微調預訓練的網路來解決自己的分類問題。

對我來說,我遇到了有趣的 Kaggle 比賽,要求候選人通過分析車載攝像頭圖像來識別注意力不集中的駕駛員。這是我嘗試使用基於 Keras 微調的好機會。 按照上面列出的微調方法,結合數據預處理、數據增強和模型集成,我們團隊在競賽中獲得了前 4% 的名次。

本文詳細介紹了我們使用的方法和經驗。

如果你有任何問題或想法,請隨時留下評論。

你也可以在 Twitter 上關注我 @flyyufelix。

https://flyyufelix.github.io/2016/10/08/fine-tuning-in-keras-part2.html

想知道關於機器學習的更多知識?


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

從 1 數到 13,想當數據科學家的你這些錯誤可別犯
為什麼你需要改進訓練數據,如何改進?

TAG:AI研習社 |