1. 程式人生 > >深度學習 Fine-tune 技巧總結

深度學習 Fine-tune 技巧總結

str 要求 圖片 學習 線性分類 選擇 共享 沒有 技巧

深度學習中需要大量的數據和計算資源(乞丐版都需要12G顯存的GPU - -)且需花費大量時間來訓練模型,但在實際中難以滿足這些需求,而使用遷移學習則能有效

降低數據量、計算量和計算時間,並能定制在新場景的業務需求,可謂一大利器。

遷移學習不是一種算法而是一種機器學習思想,應用到深度學習就是微調(Fine-tune)。通過修改預訓練網絡模型結構(如修改樣本類別輸出個數),選擇性載入預訓練網絡模型權重(通常是載入除最後的全連接層的之前所有層 ,也叫瓶頸層)

再用自己的數據集重新訓練模型就是微調的基本步驟。 微調能夠快速訓練好一個模型,用相對較小的數據量,還能達到不錯的結果。

微調的具體方法和技巧有很多種,這裏總結了在不同場景下的微調技巧:

1)新數據集比較小且和原數據集相似。因為新數據集比較小(比如<5000),如果fine-tune可能會過擬合;又因為新舊數據集類似,我們期望他們高層特征類似,可以使用預訓練網絡當做特征提取器,用提取的特征訓練線性分類器。

2)新數據集大且和原數據集相似。因為新數據集足夠大(比如>10000),可以fine-tune整個網絡。

3)新數據集小且和原數據集不相似。新數據集小,最好不要fine-tune,和原數據集不類似,最好也不使用高層特征。這時可是使用前面層的特征來訓練SVM分類器。

4)新數據集大且和原數據集不相似。因為新數據集足夠大,可以重新訓練。但是實踐中fine-tune預訓練模型還是有益的。新數據集足夠大,可以fine-tine整個網絡。

技術分享圖片

fine-tune實踐建議:

1)預訓練模型的限制。使用預訓練模型,受限於其網絡架構。例如,不能隨意從預訓練模型取出卷積層。但是因為參數共享,可以輸入任意大小的圖像;卷積層和池化層對輸入數據大小沒有要求;全連接層對輸入大小沒有要求,輸出大小固定。

2)學習率。與重新訓練相比,fine-tune要使用更小的學習率。因為訓練好的網絡模型權重已經平滑,我們不希望太快扭曲(distort)它們(尤其是當隨機初始化線性分類器來分類預訓練模型提取的特征時)。

深度學習 Fine-tune 技巧總結