1. 程式人生 > 程式設計 >pytorch實現檢視當前學習率

pytorch實現檢視當前學習率

在pytorch訓練過程中可以通過下面這一句程式碼來列印當前學習率

print(net.optimizer.state_dict()['param_groups'][0]['lr'])

補充知識:Pytorch:程式碼實現不同層設定不同的學習率,選擇性學習某些層引數

1,如何動態調整學習率

在使用pytorch進行模型訓練時,經常需要隨著訓練的進行逐漸降低學習率,在pytorch中給出了非常方面的方法:

假設我們定義了一個優化器:

import torch
import torch.nn as nn
optimizer = torch.optim(model.parameters(),lr = 0.01,momentum = 0.9)

該優化器的初始化學習為0.01,

如果我們學習每個"n" 個epoch把學習率降低為原來的0.9倍,則需要宣告一個學習率調節器:

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

其中:

optimizer: 前面宣告的優化器;

step_size: 每step_size個epoch學習率降低為原來的gamma倍,

last_epoch: 當前所處的epoch

例如:

# Assuming optimizer uses lr = 0.05 for all groups
 # lr = 0.05  if epoch < 30
 # lr = 0.005 if 30 <= epoch < 60
 # lr = 0.0005 if 60 <= epoch < 90
 # ...
 scheduler = StepLR(optimizer,step_size=30,gamma=0.1)
 for epoch in range(100):
  scheduler.step()
  train(...)
  validate(...)

另外其他常用的更新策略類似:

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

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

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

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

2,如何選擇性學習某些引數

對於我們現有的模型model,通過調整引數的requires_grad 屬性控制該模型是否參與求導運算

for name,param in model.named_parameters():
 if param.requires_grad:
  print("requires_grad: True ",name)
 else:
  print("requires_grad: False ",name)

如果模型中包含多個子模組,可用通過

sub_block = model.children()

獲取該模組,然後通過迭代索引的方式獲取引數:

for name,param in sub_block.named_parameters()

以上這篇pytorch實現檢視當前學習率就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。