您好,登錄后才能下訂單哦!
這篇文章主要介紹Pytorch中如何使用finetune,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
finetune分為全局finetune和局部finetune。首先介紹一下局部finetune步驟:
1.固定參數(shù)
for name, child in model.named_children(): for param in child.parameters(): param.requires_grad = False
后,只傳入 需要反傳的參數(shù),否則會(huì)報(bào)錯(cuò)
filter(lambda param: param.requires_grad, model.parameters())
2.調(diào)低學(xué)習(xí)率,加快衰減
finetune是在預(yù)訓(xùn)練模型上進(jìn)行微調(diào),學(xué)習(xí)速率不能太大。
目前不清楚:學(xué)習(xí)速率降低的幅度可以更快一些。這樣以來,在使用step的策略時(shí),stepsize可以更小一些。
直接從原始數(shù)據(jù)訓(xùn)練的base_lr一般為0.01,微調(diào)要比0.01小,置為0.001
要比直接訓(xùn)練的小一些,直接訓(xùn)練的stepsize為100000,finetune的stepsize: 50000
3. 固定bn或取消dropout:
batchnorm會(huì)影響訓(xùn)練的效果,隨著每個(gè)batch,追蹤樣本的均值和方差。對(duì)于固定的網(wǎng)絡(luò),bn應(yīng)該使用全局的數(shù)值
def freeze_bn(self): for layer in self.modules(): if isinstance(layer, nn.BatchNorm2d): layer.eval()
訓(xùn)練時(shí),model.train()會(huì)修改模式,freeze_zn()應(yīng)該在這里后面
4.過濾參數(shù)
訓(xùn)練時(shí),對(duì)于優(yōu)化器,應(yīng)該只傳入需要改變的參數(shù),否則會(huì)報(bào)錯(cuò)
filter(lambda p: p.requires_grad, model.parameters())
以上是“Pytorch中如何使用finetune”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。