深度學習 Fine-tune 技巧總結

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

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

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

再用本身的數據集從新訓練模型就是微調的基本步驟。 微調可以快速訓練好一個模型,用相對較小的數據量,還能達到不錯的結果。機器學習

 

微調的具體方法和技巧有不少種,這裏總結了在不一樣場景下的微調技巧:學習

 

1)新數據集比較小且和原數據集類似。由於新數據集比較小(好比<5000),若是fine-tune可能會過擬合;又由於新舊數據集相似,咱們指望他們高層特徵相似,可使用預訓練網絡當作特徵提取器,用提取的特徵訓練線性分類器。blog

2)新數據集大且和原數據集類似。由於新數據集足夠大(好比>10000),能夠fine-tune整個網絡。資源

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

4)新數據集大且和原數據集不類似。由於新數據集足夠大,能夠從新訓練。可是實踐中fine-tune預訓練模型仍是有益的。新數據集足夠大,能夠fine-tine整個網絡。io

 

 

fine-tune實踐建議:class

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

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

相關文章
相關標籤/搜索