溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Pytorch中如何使用finetune

發(fā)布時(shí)間:2021-06-17 14:28:25 來源:億速云 閱讀:290 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹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è)資訊頻道!

向AI問一下細(xì)節(jié)

免責(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)容。

AI