Pytorch之finetune使用詳解
finetune分為全局finetune和局部finetune。首先介紹一下局部finetune步驟:
1.固定參數(shù)
for name, child in model.named_children(): for param in child.parameters(): param.requires_grad = False
后,只傳入 需要反傳的參數(shù),否則會報錯
filter(lambda param: param.requires_grad, model.parameters())
2.調(diào)低學習率,加快衰減
finetune是在預訓練模型上進行微調(diào),學習速率不能太大。
目前不清楚:學習速率降低的幅度可以更快一些。這樣以來,在使用step的策略時,stepsize可以更小一些。
直接從原始數(shù)據(jù)訓練的base_lr一般為0.01,微調(diào)要比0.01小,置為0.001
要比直接訓練的小一些,直接訓練的stepsize為100000,finetune的stepsize: 50000
3. 固定bn或取消dropout:
batchnorm會影響訓練的效果,隨著每個batch,追蹤樣本的均值和方差。對于固定的網(wǎng)絡,bn應該使用全局的數(shù)值
def freeze_bn(self): for layer in self.modules(): if isinstance(layer, nn.BatchNorm2d): layer.eval()
訓練時,model.train()會修改模式,freeze_zn()應該在這里后面
4.過濾參數(shù)
訓練時,對于優(yōu)化器,應該只傳入需要改變的參數(shù),否則會報錯
filter(lambda p: p.requires_grad, model.parameters())
以上這篇Pytorch之finetune使用詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
如何修復使用 Python ORM 工具 SQLAlchemy 時的常見陷阱
SQLAlchemy 是一個 Python ORM 工具包,它提供使用 Python 訪問 SQL 數(shù)據(jù)庫的功能。這篇文章主要介紹了如何修復使用 Python ORM 工具 SQLAlchemy 時的常見陷阱,需要的朋友可以參考下2019-11-11django中使用POST方法獲取POST數(shù)據(jù)
這篇文章主要介紹了django中使用POST方法獲取POST數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08python使用tesseract實現(xiàn)字符識別功能
Tesseract 是一個開源的光學字符識別(OCR)引擎,它能夠識別多種語言的文本,可將掃描文檔、圖像中的文字提取并轉換為計算機可編輯的文本格式,本文給大家介紹了python使用tesseract實現(xiàn)字符識別功能,需要的朋友可以參考下2024-10-10Python 調(diào)用 Windows API COM 新法
Python中調(diào)用Win32API 通常都是使用 PyWin32或者ctypes。本文給大家介紹Python 調(diào)用 Windows API COM 新法,感興趣的朋友跟隨小編一起看看吧2019-08-08Django在Win7下的安裝及創(chuàng)建項目hello word簡明教程
這篇文章主要介紹了Django在Win7下的安裝及創(chuàng)建項目hello word,需要的朋友可以參考下2014-07-07Python?Pyecharts繪制?;鶊D分析用戶行為路徑
這篇文章主要為大家介紹了Python?Pyecharts繪制?;鶊D分析用戶行為路徑,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05