Pytorch 如何訓練網(wǎng)絡(luò)時調(diào)整學習率
為了得到更好的網(wǎng)絡(luò),學習率通常是要調(diào)整的,即剛開始用較大的學習率來加快網(wǎng)絡(luò)的訓練,之后為了提高精確度,需要將學習率調(diào)低一點。
如圖所示,步長(學習率)太大容易跨過最優(yōu)解。
代碼如下:
表示每20個epoch學習率調(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 在訓練過程中實現(xiàn)學習率衰減
在網(wǎng)絡(luò)的訓練過程中,學習率是一個非常重要的超參數(shù),它直接影響了網(wǎng)絡(luò)的訓練效果。
但過大的學習率將會導致網(wǎng)絡(luò)無法達到局部最小點,使得訓練結(jié)果震蕩,準確率無法提升,而過小的學習率將會導致擬合速度過慢,浪費大量的時間和算力。
因此我們希望在訓練之初能夠有較大的學習率加快擬合的速率,之后降低學習率,使得網(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即為操作學習率的函數(shù)。
將每個參數(shù)組的學習速率設(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) 為學習率衰減期,指幾個epoch衰減一次。gamma為學習率衰減的乘積因子。 默認為0.1 。當last_epoch=-1時,將初始lr設(shè)置為lr。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)示例代碼
在Python中,分支結(jié)構(gòu)通過if、elif和else關(guān)鍵字來實現(xiàn)條件判斷,在使用if語句時,程序會根據(jù)條件表達式的真假執(zhí)行相應(yīng)的代碼塊,這篇文章主要介紹了Python分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),需要的朋友可以參考下2024-03-03Tensorflow實現(xiàn)神經(jīng)網(wǎng)絡(luò)擬合線性回歸
這篇文章主要為大家詳細介紹了Tensorflow實現(xiàn)神經(jīng)網(wǎng)絡(luò)擬合線性回歸,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07Python實現(xiàn)復雜對象轉(zhuǎn)JSON的方法示例
這篇文章主要介紹了Python實現(xiàn)復雜對象轉(zhuǎn)JSON的方法,結(jié)合具體實例形式分析了Python針對json轉(zhuǎn)換的相關(guān)操作技巧,需要的朋友可以參考下2017-06-06淺談對pytroch中torch.autograd.backward的思考
這篇文章主要介紹了對pytroch中torch.autograd.backward的思考,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12python3實現(xiàn)mysql導出excel的方法
這篇文章主要介紹了python3實現(xiàn)mysql導出excel的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-07-07