PyTorch常用學(xué)習(xí)率調(diào)整策略

神經(jīng)網(wǎng)絡(luò)在進行參數(shù)優(yōu)化的過程中,經(jīng)常需要對學(xué)習(xí)率進行動態(tài)調(diào)整霸琴。那么PyTorch的torch.optim.lr_scheduler接口提供了很多策略實現(xiàn)動態(tài)調(diào)整。我們選取一些常用的進行介紹。

1. torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=- 1, verbose=False)

Sets the learning rate of each parameter group to the initial lr times a given function.

這個策略也比較簡單严卖,就是每次調(diào)用scheduler.step()之后烟具,新的lr等于原lr乘lr_lambda梢什。舉例如下,其中network可以換成我們要優(yōu)化的模型:

optim = torch.optim.Adam(network.parameters(), lr=0.001)
scheduler = torch.optim.lr_scheduler.LambdaLR(optim, lambda epoch: epoch)
for epoch in range(10):
    optim.step()
    scheduler.step()
    print(scheduler.get_last_lr())

輸出結(jié)果如下:
[0.001]
[0.002]
[0.003]
[0.004]
[0.005]
[0.006]
[0.007]
[0.008]
[0.009000000000000001]
[0.01]
可以看到每次調(diào)用step之后朝聋,lr = lr * lr_lambda(epoch)嗡午。

2.torch.optim.lr_scheduler.MultiplicativeLR(optimizer, lr_lambda, last_epoch=- 1, verbose=False)

Multiply the learning rate of each parameter group by the factor given in the specified function.

這個方法跟LambdaLR類似,都是乘lambda_lr冀痕,不同的是MultiplicativeLR是用上一步得到的lr荔睹,而LambdaLR用的始終是初始的lr。

optim = torch.optim.Adam(network.parameters(), lr=0.001)
scheduler = torch.optim.lr_scheduler.MultiplicativeLR(optim, lambda epoch: 0.5)
for epoch in range(10):
    optim.step()
    scheduler.step()
    print(scheduler.get_last_lr())

結(jié)果如下:
[0.0005]
[0.00025]
[0.000125]
[6.25e-05]
[3.125e-05]
[1.5625e-05]
[7.8125e-06]
[3.90625e-06]
[1.953125e-06]
[9.765625e-07]

3. torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=- 1, verbose=False)

Decays the learning rate of each parameter group by gamma every step_size epochs.

每間隔step_size個epoch金度,對lr執(zhí)行一次乘 gamma操作应媚。

optim = torch.optim.Adam(network.parameters(), lr=0.001)
scheduler = torch.optim.lr_scheduler.StepLR(optim, step_size=5, gamma=0.1)
for i, epoch in enumerate(range(20)):
    optim.step()
    scheduler.step()
    print(i, scheduler.get_last_lr())

結(jié)果如下:
0 [0.001]
1 [0.001]
2 [0.001]
3 [0.001]
4 [0.0001]
5 [0.0001]
6 [0.0001]
7 [0.0001]
8 [0.0001]
9 [1e-05]
10 [1e-05]
11 [1e-05]
12 [1e-05]
13 [1e-05]
14 [1.0000000000000002e-06]
15 [1.0000000000000002e-06]
16 [1.0000000000000002e-06]
17 [1.0000000000000002e-06]
18 [1.0000000000000002e-06]
19 [1.0000000000000002e-07]

4. torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=- 1, verbose=False)

Decays the learning rate of each parameter group by gamma once the number of epoch reaches one of the milestones.

StepLR是等間隔的調(diào)整lr, 而MultiStepLR是根據(jù)指定間隔進行調(diào)整猜极,milestones即為自定義的間隔中姜。

optim = torch.optim.Adam(network.parameters(), lr=0.001)
scheduler = torch.optim.lr_scheduler.MultiStepLR(optim, milestones=[2,6], gamma=0.1)
for i, epoch in enumerate(range(10)):
    optim.step()
    scheduler.step()
    print(i, scheduler.get_last_lr())

結(jié)果如下,可以看到分別在第二步和第六步進行了兩次學(xué)習(xí)率的調(diào)整。
0 [0.001]
1 [0.0001]
2 [0.0001]
3 [0.0001]
4 [0.0001]
5 [1e-05]
6 [1e-05]
7 [1e-05]
8 [1e-05]
9 [1e-05]

5.torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=- 1, verbose=False)

Decays the learning rate of each parameter group by gamma every epoch.

簡單講就是按照如下規(guī)則進行l(wèi)r的更新: lr=lr?gamma??epoch

6. torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=- 1, verbose=False)

余弦退火策略丢胚。以余弦函數(shù)為周期翩瓜,并在每個周期最大值時重新設(shè)置學(xué)習(xí)率。以初始學(xué)習(xí)率為最大學(xué)習(xí)率携龟,以2?Tmax 為周期兔跌,在一個周期內(nèi)先下降,后上升峡蟋。
其中eta_min指一個周期內(nèi)的最小學(xué)習(xí)率坟桅。


CosineAnnealingLR

7. torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08, verbose=False)

這是個超級實用的學(xué)習(xí)率調(diào)整策略。他會監(jiān)測一個指標蕊蝗,當這個指標不在下降或提高是仅乓,進行學(xué)習(xí)率更新,否則保持學(xué)習(xí)率不變蓬戚。每次step需要傳入要監(jiān)測的指標夸楣。

Reduce learning rate when a metric has stopped improving.

val_loss = validate(...)
scheduler.step(val_loss)
這里要注意的是step的參數(shù),如果是越小越好子漩,如loss豫喧,需要將mode設(shè)置成'min',如果是越大越好的指標幢泼,如Accuracy紧显,需要將mode設(shè)置成'max'。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缕棵,一起剝皮案震驚了整個濱河市鸟妙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挥吵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件花椭,死亡現(xiàn)場離奇詭異忽匈,居然都是意外死亡,警方通過查閱死者的電腦和手機矿辽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門丹允,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人袋倔,你說我怎么就攤上這事雕蔽。” “怎么了宾娜?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵批狐,是天一觀的道長。 經(jīng)常有香客問我,道長嚣艇,這世上最難降的妖魔是什么承冰? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮食零,結(jié)果婚禮上困乒,老公的妹妹穿的比我還像新娘。我一直安慰自己贰谣,他們只是感情好娜搂,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吱抚,像睡著了一般百宇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上频伤,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天恳谎,我揣著相機與錄音,去河邊找鬼憋肖。 笑死因痛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的岸更。 我是一名探鬼主播鸵膏,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怎炊!你這毒婦竟也來了谭企?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤评肆,失蹤者是張志新(化名)和其女友劉穎债查,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓜挽,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡盹廷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了久橙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俄占。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淆衷,靈堂內(nèi)的尸體忽然破棺而出缸榄,到底是詐尸還是另有隱情,我是刑警寧澤祝拯,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布甚带,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏欲低。R本人自食惡果不足惜辕宏,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望砾莱。 院中可真熱鬧瑞筐,春花似錦、人聲如沸腊瑟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闰非。三九已至膘格,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間财松,已是汗流浹背瘪贱。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辆毡,地道東北人菜秦。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像舶掖,于是被迫代替她去往敵國和親球昨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容