(13)pytorch之學習率調整
技術標籤:pytorch
一、為什麼要調整學習率
學習率控制著更新的步伐,我們希望前期學習率大一些(大幅度定位),後期學習率小一些(小範圍定位)
初始學習率一般設定較小的數:0.01、0.001之類
二、pytorch提供的學習率調整策略
都繼承一個基類 _LRScheduler
主要屬性:optimizer:關聯的優化器(所以這個學習率調整器在optimizer宣告之後才出現,optimizer先指定一個lr,這裡再繫結optimizer)
last_epoch:記錄epoch數(可以得知學習率的調整是以epoch為週期的)
base_lrs:記錄初始學習率(為一個list)
主要方法:step()更新下一個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為自定義調整