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