微調(Fine-tune)原理


  在自己的數據集上訓練一個新的深度學習模型時,一般采取在預訓練好的模型上進行微調的方法。什么是微調?這里已VGG16為例進行講解,下面貼出VGGNet結構示意圖。  

   

  上面圈出來的是VGG16示意圖,也可以用如下兩個圖表示。

   

   

  如上圖所示 ,VGG16的結構為卷積+全連接層。卷積層分為5個部分共13層,即圖中的conv1~conv5。還有3層是全連接層,即圖中的fc6、fc7、fc8。卷積層加上全連接層合起來一共為16層,因此它被稱為VGG16。如果要將VGG16的結構用於一個新的數據集,首先要去掉fc8這一層。原因是fc8層的輸入是fc7的特征,輸出是1000類的概率,這1000類正好對應了ImageNet模型中的1000個類別。在自己的數據中,類別數一般不是1000類,因此fc8層的結構在此時是不適用的,必須將fc8層去掉,重新采用符合數據集類別數的全連接層,作為新的fc8。比如數據集為5類,那么新的fc8的輸出也應當是5類。

  此外,在訓練的時候,網絡的參數的初始值並不是隨機化生成的,而是采用VGG16在ImageNet上已經訓練好的參數作為訓練的初始值。這樣做的原因在於,在ImageNet數據集上訓練過的VGG16中的參數已經包含了大量有用的卷積過濾器,與其從零開始初始化VGG16的所有參數,不如使用已經訓練好的參數當作訓練的起點。這樣做不僅可以節約大量訓練時間,而且有助於分類器性能的提高。

  載入VGG16的參數后,就可以開始訓練了。此時需要指定訓練層數的范圍。一般來說,可以選擇以下幾種范圍進行訓練:

  (1):只訓練fc8。訓練范圍一定要包含fc8這一層。因為fc8的結構被調整過,所有它的參數不能直接從ImageNet預訓練模型中取得。可以只訓練fc8,保持其他層的參數不動。這就相當於將VGG16當作一個“特征提取器”:用fc7層提取的特征做一個Softmax模型分類。這樣做的好處是訓練速度快,但往往性能不會太好。
  (2):訓練所有參數。還可以對網絡中的所有參數進行訓練,這種方法的訓練速度可能比較慢,但是能取得較高的性能,可以充分發揮深度模型的威力。
  (3):訓練部分參數。通常是固定淺層參數不變,訓練深層參數。如固定conv1、conv2部分的參數不訓練,只訓練conv3、conv4、conv5、fc6、fc7、fc8的參數

  微調的原理大致意思就是先看懂網絡的結構圖,然后把網絡的一部分修改成自己需要的模型。這種訓練方法就是所謂的對神經網絡模型做微調。借助微調,可以從預訓練模型出發,將神經網絡應用到自己的數據集上。

 


免責聲明!

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



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