scheduler主要是为了在训练中以不同的测略来调整学习率,当然如果不涉及到学习率大小的变化也就用不到该函数了。
下面分别为不同的变化测略及相应的代码实例:
1,指数衰减:在训练的过程中,学习率以设定的gamma参数进行指数的衰减。
optimizer = torch.optim.SGD(net.parameters(), lr = 0.001)
expr_scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma = 0.8)
2, 固定步长衰减:在固定的训练周期后,以指定的频率进行衰减。
optimizer = torch.optim.SGD(net.parameters(), lr = 0.001)
steplr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size = step, gamma = 0.8)
3, 分区间,分频率衰减:在不同的训练周期内采用不同的衰减系数进行衰减,即有的区间不衰减,有的区间衰减的慢,有的区间衰减的快。
optimzer = torch.optim.SGD(net.parameters(), lr = 0.001)
multistepLR = torch.optim.lr_scheduler.MultiStepLR(optimzer, milestones = [100,200,300,500], gamma = 0.8)
4, 余弦退火衰减:顾名思义,该衰减方法使得学习率在模型训练中像余弦函数一样进行变化,模型中相应的参数为:T_max为余弦函数的周期,eta_min为学习率的最小值。
optimizer = torch.optim.SGD(net.parameters(), lr = 0.001)
CosineLR = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=150, eta_min=0)
5, ReduceLROnPlateau: 根据测识指标进行相应的学习率衰减,即在训练过程中,如果模型的评价指标在一定的训练周期内未有提升,则进行学习率的衰减变化。涉及到的参数有:
opimizer:待衰减的优化器
mode:设定为’min’时,当监控指标停止下降时,衰减学习率,设定为’max’时,当监控指标停止上升时,衰减学习率。
factor: 学习率每次衰减的系数的大小。
patience: 所容忍的监控指标停止变化的训练次数。
verbose: 是否打印相应的训练信息。
min_lr: 学习率的下限值。
optimizer = torch.optim.SGD(net.parameters(), lr = 0.001)
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)
还有诸如:CosineAnnealingWarmRestarts, OneCycleLR等相关学习率衰减函数。