1. 程式人生 > 其它 >(13)pytorch之學習率調整

(13)pytorch之學習率調整

技術標籤:pytorch

一、為什麼要調整學習率

學習率控制著更新的步伐,我們希望前期學習率大一些(大幅度定位),後期學習率小一些(小範圍定位)
初始學習率一般設定較小的數:0.01、0.001之類

二、pytorch提供的學習率調整策略

都繼承一個基類 _LRScheduler
在這裡插入圖片描述
主要屬性:optimizer:關聯的優化器(所以這個學習率調整器在optimizer宣告之後才出現,optimizer先指定一個lr,這裡再繫結optimizer)
last_epoch:記錄epoch數(可以得知學習率的調整是以epoch為週期的)
base_lrs:記錄初始學習率(為一個list)
主要方法:step()更新下一個epoch的學習率

get_lr():虛擬函式(讓子類overwrite的),計算下一個epoch的學習率

(以下調整類都基於_LRScheduler)使用格式optim.lr_scheduler.名字()

1 StepLR:等間隔調整學習率,調整方式 lr=lr*gamma

在這裡插入圖片描述
主要引數:step_size:調整間隔數(每多少個epoch調整一次)
gamma:調整係數

LR=0.1
iteration=50
max_epoch=200

weights=t.randn((1),requires_grad=True)
target=t.zeros((1))
optimizer=optim.SGD([weight],lr=
LR,momentum=0.9) scheduler_lr=optim.lr_scheduler.StepLR(optimizer,step_size=50,gamma=0.1) lr_list,epoch_list=list(),list() for epoch in range(max_epoch): lr_list.append(scheduler_lr.get_lr()) epoch_list.append(epoch) for i in range(iteration): loss=t.pow((weights-target),2) loss.
backward() optimizer.step() optimizer.zero_grad() scheduler_lr.step() for i in lr_list: print(i)

2.MultiStepLR:按給定的間隔調整學習率 調整方式:lr=lr*gamma

在這裡插入圖片描述
主要引數:milestones:設定更新epoch數,(所以這個是列表)
gamma:調整係數

3.ExponentialLR:按指數衰減調整學習率 調整方式lr=lr*gamma**epoch

在這裡插入圖片描述
主要引數:gamma:指數的底

4.CosineAnnealingLR:餘弦週期調整學習率 調整方式

在這裡插入圖片描述
在這裡插入圖片描述
主要引數:T_max:下降週期,一個週期為2個T_max(在第一個t_max下降到最低,然後在第二個t_max恢復到最高,一直往復)
eta_min:學習率下限

5.ReduceLRonPlateau: 監控指標,當指標不再變化則調整,

在這裡插入圖片描述
主要引數:mode:min/max兩種模式(min是指監控指標不下降就調整,max是指監控指標不上升就調整)
factor:調整係數 相當於gamma lr=lr*gamma
patience:耐心,接受幾次不變化
cooldown:冷卻時間,停止監控一段時間(每次調整後會cd一段時間)
verbose:是否列印日誌 bool變數
min_lr:學習率下限
eps:學習率衰減最小值(不知道具體啥意思)

6.lambdaLR:自定義調整策略

在這裡插入圖片描述
主要引數:lr_lambda:可以是一個函式,也可以是一個list(裡面元素為函式)

小結:
1-4為有序調整,我們需要知道什麼時候需要調整
5為自適應調整
6為自定義調整