模型微调
什么是預訓練模型
- 預訓練模型就是已經用數據集訓練好了的模型
- 現在我們常用的預訓練模型,比如:VGG16/19,Resnet等模型,并且已經用大型數據集來做訓練,如:Imagenet,得到訓練好的模型參數
什么情況下使用微調
- 手頭的數據集類型和預訓練模型的數據集內容相似,因為不同數據集模型提取的特征不同,所以相應的參數訓練后也是不同的
- 數據集內容相似,但是數據量太少
- 計算資源不夠
- 自己創建的模型正確率較低
為什么要微調
- 用大型數據集訓練后的模型,具備提取淺層基礎特征和深層抽象特征的能力
- 淺層卷積層提取基礎特征,比如:邊緣,輪廓等基礎特征
- 深層卷積層提取抽象特征,比如:整個臉型
- 全連接層根據特征組合進行評分分類
不做微調:
- 從頭開始訓練模型,需要大量的數據,計算時間和計算資源
- 存在模型不收斂,參數不夠優化,準確率低,模型泛化能力低,容易過擬合等風險
做微調,可以一定程度上緩解上述存在的問題。
模型微調注意事項
- 通常是截斷預訓練好網絡的最后一層(softmax層),用我們自己的softmax層進行替換。如:Imagenet上預訓練好的網絡輸出是1000個類別,我們的實際項目輸出類別是10項,則可以進行上述替換。然后,我們在網絡上運行預先訓練的權重,確保執行交叉驗證。
- 使用較小學習率來訓練網絡。由于我們預計預先訓練網絡的權重相對于隨機初始化的權重已經相當不錯,我們不想過快的扭曲它們,通常做法是使初始學習率比從頭開始訓練的初始學習率小10倍
- 如果手頭數據集數量過少,我們可以只訓練最后一層,如果數據集數量中等,我們可以凍結預訓練網絡的前幾層權重。因為網絡的前幾層提取的是基礎特征,如:邊緣,輪廓。我們希望保持這些權重不變,讓我們的網絡更專注于學習后續深層中特定于數據集的特征
不同數據集下使用微調
- 數據集少,但內容相似度高。這種情況下,我們修改最后幾層或者softmax層的輸出類別
- 數據集少,內容相似度低。這種情況下,我們凍結預訓練網絡的初始層(比如K層),然后訓練剩余的N-K層。因為數據集內容相似度低,因此我們需要對較高層進行重新訓練
- 數據集大,但內容相似度低。這種情況下,需要根據自己的數據從頭開始訓練神經網絡
- 數據量大,內容相似度高。這種情況下,十分理想了,預訓練模型也是最有效的。使用模型的最好方法是保留模型的結構和初始權重,然后,我們可以使用預先訓練的模型中的權重來重新訓練該模型。
總結
- 上一篇: 如何对ABAP SE80 workben
- 下一篇: linux删除文件后,空间未释放的一种情