微調(Fine-tune)原理

  在本身的數據集上訓練一個新的深度學習模型時,通常採起在預訓練好的模型上進行微調的方法。什麼是微調?這裏已VGG16爲例進行講解,下面貼出VGGNet結構示意圖。  網絡

   

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

   

   

  如上圖所示 ,VGG16的結構爲卷積+全鏈接層。卷積層分爲5個部分共13層,即圖中的conv1~conv5。還有3層是全鏈接層,即圖中的fc六、fc七、fc8。卷積層加上全鏈接層合起來一共爲16層,所以它被稱爲VGG16。若是要將VGG16的結構用於一個新的數據集,首先要去掉fc8這一層。緣由是fc8層的輸入是fc7的特徵,輸出是1000類的機率,這1000類正好對應了ImageNet模型中的1000個類別。在本身的數據中,類別數通常不是1000類,所以fc8層的結構在此時是不適用的,必須將fc8層去掉,從新採用符合數據集類別數的全鏈接層,做爲新的fc8。好比數據集爲5類,那麼新的fc8的輸出也應當是5類。學習

  此外,在訓練的時候,網絡的參數的初始值並非隨機化生成的,而是採用VGG16在ImageNet上已經訓練好的參數做爲訓練的初始值。這樣作的緣由在於,在ImageNet數據集上訓練過的VGG16中的參數已經包含了大量有用的卷積過濾器,與其從零開始初始化VGG16的全部參數,不如使用已經訓練好的參數看成訓練的起點。這樣作不只能夠節約大量訓練時間,並且有助於分類器性能的提升。spa

  載入VGG16的參數後,就能夠開始訓練了。此時須要指定訓練層數的範圍。通常來講,能夠選擇如下幾種範圍進行訓練:blog

  (1):只訓練fc8。訓練範圍必定要包含fc8這一層。由於fc8的結構被調整過,全部它的參數不能直接從ImageNet預訓練模型中取得。能夠只訓練fc8,保持其餘層的參數不動。這就至關於將VGG16看成一個「特徵提取器」:用fc7層提取的特徵作一個Softmax模型分類。這樣作的好處是訓練速度快,但每每性能不會太好。
  (2):訓練全部參數。還能夠對網絡中的全部參數進行訓練,這種方法的訓練速度可能比較慢,可是能取得較高的性能,能夠充分發揮深度模型的威力。
  (3):訓練部分參數。一般是固定淺層參數不變,訓練深層參數。如固定conv一、conv2部分的參數不訓練,只訓練conv三、conv四、conv五、fc六、fc七、fc8的參數深度學習

  微調的原理大體意思就是先看懂網絡的結構圖,而後把網絡的一部分修改爲本身須要的模型。這種訓練方法就是所謂的對神經網絡模型作微調。藉助微調,能夠從預訓練模型出發,將神經網絡應用到本身的數據集上。原理

相關文章
相關標籤/搜索