關於fine-tuning


什么是fine-tuning?簡單舉一個本人的例子來說明

  我有兩種類型的數據集,一種命名為style1,另一種為style2,兩種數據集類型(也就是label)一致,但是數據卻采集於不同的地方,比如佛經的手寫文字和《黃帝內經》的手寫文字。現在我基於style1的數據集上訓練出一個識別模型,然后用這個識別模型對style2進行驗證,若是兩者之間的差異性很大,那么得到的驗證准確率定然非常低。這個時候就要對這個識別模型進行fine-tuning,就是微調的意思。

上面就是舉一個我自己的例子

下面就來自於其他人的講述*

  在實踐中,由於數據集不夠大,很少有人從頭開始訓練網絡。常見的做法是使用預訓練的網絡(例如在ImageNet上訓練的分類1000類的網絡)來重新fine-tuning(也叫微調),或者當做特征提取器。

看不懂的沒有關系,你就理解為在訓練之前的預訓練階段吧。

何時以及如何Fine-tune*

  決定如何使用遷移學習的因素有很多,這是最重要的只有兩個:新數據集的大小、以及新數據和原數據集的相似程度。有一點一定記住:網絡前幾層學到的是通用特征,后面幾層學到的是與類別相關的特征。這里有使用的四個場景:

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

  2.新數據集大且和原數據集相似。因為新數據集足夠大,可以fine-tune整個網絡。

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

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

概念講完|學習如何實踐

  首先你要確定數據集兩者必須存在一定的關聯性,不能一套文字pic和一套人臉pic,當然這都是開玩笑,畢竟深度學習網絡深不可測,說不定沒有任何關聯性的數據集也就是可以呢,咱也不敢問反正。

  接下來就是去預訓練模型,訓練之后不可以隨意從預訓練模型中取出卷積層等,最要是在原有網絡基礎上直接進行訓練。

  最后要提一下最關鍵的部分,就是學習率的調整, 因為預訓練好的模型已經很平滑了,權重基本上達到了一個極值,所以在最好使用更小的學習率。

  總之就是,不要動網絡結構,因為你訓練好的參數就是對照着你之前的網絡的,然后降低一下自己的學習率,具體多少可以看心情,反正我是(lr*0.01),然后開始訓練另外一個數據集,perfect!

總結

  可能我說的不是很嚴謹,但是so?

 

 

(帶*的是拿別人的,有問題你找這個人,跟我沒關系,我就是來學習的:https://blog.csdn.net/weixin_42137700/article/details/82107208


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM