pytorch中調整學習率的lr_scheduler機制


有的時候需要我們通過一定機制來調整學習率,這個時候可以借助於torch.optim.lr_scheduler類來進行調整;一般地有下面兩種調整策略:(通過兩個例子來展示一下)

兩種機制:LambdaLR機制和StepLR機制;

(1)LambdaLR機制:

optimizer_G = torch.optim.Adam([{'params' : optimizer_G.parameters() , 'initial_lr' : train_opt.lr}] , lr = train_opt.lr , betas = (train_opt.betal , 0.999))

lambda_G = lambda epoch : 0.5 ** (epoch // 30)

schduler_G = torch.optim.lr_scheduler.LambdaLR(optimizer_G.parameters() , lambda_G , last_epoch = 29);

scheduler.step()

lr = schduler.get_lr()[0];  //這里記得加一個[0]的索引!

for param_group in optimizer_G.param_groups():

  param_group['lr'] = lr

解釋:last_epoch是開始的前一個epoch的索引值,這里為29表示從epoch = 30開始(其中scheduler類中的epoch從last_epoch + 1開始,每次step操作epoch加1),學習率調整為lr * (0.5 ** (epoch // 30));另外注意的是:定義optimizer_G類時,需要寫成上述那種形式,不要寫成以前常見的“optimizer_G = torch.optim.Adam(params = optimizer_G.parameters()...)”,要像這里一樣寫成字典形式;否則lr_scheduler類會報“沒有initial_lr的錯誤”

(2)StepLR機制:

schduler_G = torch.optim.lr_scheduler.StepLR(optimizer_G.parameters() , step_size = 30 , gamma = 0.1 , last_epoch = 29)

其他的和上面類似,這里的調整策略如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM