Pytorch 如何訓(xùn)練網(wǎng)絡(luò)時調(diào)整學(xué)習(xí)率
為了得到更好的網(wǎng)絡(luò),學(xué)習(xí)率通常是要調(diào)整的,即剛開始用較大的學(xué)習(xí)率來加快網(wǎng)絡(luò)的訓(xùn)練,之后為了提高精確度,需要將學(xué)習(xí)率調(diào)低一點。
如圖所示,步長(學(xué)習(xí)率)太大容易跨過最優(yōu)解。

代碼如下:
表示每20個epoch學(xué)習(xí)率調(diào)整為之前的10%
optimizer = optim.SGD(gan.parameters(), lr=0.1, momentum=0.9, weight_decay=0.0005)
lr = optimizer.param_groups[0]['lr'] * (0.1 ** (epoch // 20)) for param_group in optimizer.param_groups: param_group['lr'] = lr print(optimizer.param_groups[0]['lr'])
補充:Pytorch 在訓(xùn)練過程中實現(xiàn)學(xué)習(xí)率衰減
在網(wǎng)絡(luò)的訓(xùn)練過程中,學(xué)習(xí)率是一個非常重要的超參數(shù),它直接影響了網(wǎng)絡(luò)的訓(xùn)練效果。
但過大的學(xué)習(xí)率將會導(dǎo)致網(wǎng)絡(luò)無法達到局部最小點,使得訓(xùn)練結(jié)果震蕩,準確率無法提升,而過小的學(xué)習(xí)率將會導(dǎo)致擬合速度過慢,浪費大量的時間和算力。
因此我們希望在訓(xùn)練之初能夠有較大的學(xué)習(xí)率加快擬合的速率,之后降低學(xué)習(xí)率,使得網(wǎng)絡(luò)能夠更好的達到局部最小,提高網(wǎng)絡(luò)的效率。
torch.optim.lr_scheduler.LambdaLR()
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)
其中optimizer就是包裝好的優(yōu)化器, lr_lambda即為操作學(xué)習(xí)率的函數(shù)。
將每個參數(shù)組的學(xué)習(xí)速率設(shè)置為初始的lr乘以一個給定的函數(shù)。
當last_epoch=-1時,將初始lr設(shè)置為lr。
torch.optim.lr_scheduler.StepLR()
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)
其中optimizer就是包裝好的優(yōu)化器,step_size (int) 為學(xué)習(xí)率衰減期,指幾個epoch衰減一次。gamma為學(xué)習(xí)率衰減的乘積因子。 默認為0.1 。當last_epoch=-1時,將初始lr設(shè)置為lr。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持本站。
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信