为什么要调整学习率
主要属性:
optimizer:关联的优化器
last_epoch:记录epoch数
base_lrs:记录初始学习率
主要方法:
step():更新下一个epoch的学习率
get_lr():虚函数,计算下一个epoch的学习率
class _LRScheduler(object):
def __init__(self, optimizer, last_epoch=-1):
def get_lr(self):
raise NotImplementedError
pytorch的六种学习率调整策略
StrpLR
调整方式:lr = lr * gamma
lr_scheduler.StepLR(#等间隔调整学习率
optimizer,
step_size, #调整间隔数
gamma=0.1, #调整系数
last_epoch=-1
)
MultiStepLR
调整方式:lr = lr * gamma
lr_scheduler.MultiStepLR(#按给定间隔调整学习率
optimizer,
milestones, #设定调整时刻数
gamma=0.1, #调整系数
last_epoch=-1
)
ExponentialLR
调整方式:lr = lr * gamma ** epoch
lr_scheduler.ExponentialLR(#按指数衰减调整学习率
ptimizer,
gamma, #指数的底
last_epoch=-1
)
CosineAnnealingLR
调整方式:
lr_scheduler.CosineAnnealingLR(#余弦周期调整学习率
optimizer,
T_max, #下降周期
eta_min=0, #学习率下限
last_epoch=-1
)
ReduceLRonPlateau
lr_scheduler.ReduceLROnPlateau(
optimizer,
mode='min', #min/max 两种模式
factor=0.1, #调整系数
patience=10, #“耐心”,接受几次不变化
verbose=False, #是否打印日志
threshold=0.0001,
threshold_mode='rel',
cooldown=0, #“冷却时间”,停止监控一段时间
min_lr=0, #学习率下限
eps=1e-08#学习率衰减最小值
)
LambdaLR
lr_scheduler.LambdaLR(#自定义调整策略
optimizer,
lr_lambda, #function or list
last_epoch=-1
)
学习率调整小结
1. 有序调整:Step、MultiStep、Exponential 和 CosineAnnealing
2. 自适应调整:ReduceLROnPleateau
3. 自定义调整:Lambda
学习率初始化:
1. 设置较小数:0.01、0.001、0.0001
2. 搜索最大学习率: 《Cyclical Learning Rates for Training Neural Networks》