一、学习率调整策略
梯度下降: w i + 1 = w i − L R ∗ g ( w i ) w_{i+1} = w_i-LR *g(w_i) wi+1=wi−LR∗g(wi),学习率(learning rate)控制更新的步伐
pytorch中所有学习率控制都继承与class _LRScheduler
主要属性及函数:
- optimizer:关联的优化器
- last_epoch:记录epoch数
- base_lrs:记录初始学习率
- step():更新下一个epoch的学习率
- get_lr():虚函数,计算下一个epoch的学习率
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1) # 设置学习率下降策略
for epoch in range(MAX_EPOCH):
...
for i, data in enumerate(train_loader):
...
scheduler.step() # 更新学习率,注意在每个epoch调用,而不是每个iteration
1. 有序调整——Step, MultiStep, Exponential & CosineAnnealing
StepLR
功能:等间隔调整学习率
主要参数:
• step_size:调整间隔数
• gamma:调整系数
l r = l r 0 ∗ g a m m a ∗ ∗ ( e p o c h / / s t e p _ s i z e ) lr = lr_0 * gamma**(epoch//step\_size) lr=lr0∗gamma∗∗(epoch//step_size)
MultiStepLR
功能:按给定间隔调整学习率
主要参数:
• milestones:设定调整时刻数
• gamma:调整系数
l r = l r ∗ g a m m a lr = lr * gamma lr=lr∗gamma
ExponentialLR
功能:按指数衰减调整学习率
主要参数:
• gamma:指数的底
l r = l r 0 ∗ g a m m a ∗ ∗ e p o c h lr = lr_0 * gamma**epoch lr=lr0∗