pytorch学习系列(1):学习率调整
1. 等间隔调整:
以SGD优化算法为例,初始学习率为0.001。
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size = 20, gamma = 0.1, last_epoch=-1)
for epoch in range(60):
scheduler.step()
train()
其中gamma为调整倍数,20指的是调整的间隔,即0-20、21-40、41-60epoch内的学习率分别为0.001、0.0001、0.00001.
last_epoch为上一个epoch数,一般默认为-1初始值。如果需要断点续训,则将其改为续接的点的epoch。
2. 按需间隔调整
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones = [50, 80], gamma = 0.1, last_epoch=-1)
for epoch in range(100):
scheduler.step()
train()
0-50、51-80、81-100epochs的学习率分别为0.001、0.0001、0.00001.
3. 指数衰减调整
其调整方式为学习率=上一epoch的学习率*gamma^epoch
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma = 0.1, last_epoch=-1)
for epoch in range(100):
scheduler.step()
train()
4.余弦退火调整
以余弦函数的周期为周期,在每个周期的最大值时重新设置学习率,初始学习率为最大学习率,以2*T_max为周期,周期内先下降后上升。
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max = 10, eta_min=0, last_epoch=-1)
for epoch in range(100):
scheduler.step()
train()
T_max个epoch之后重新设置学习率
eta_min为最小学习率,即周期内学习率最小下降的下限,默认为0
5.自适应调整学习率
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
scheduler = 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)
for epoch in range(100):
train()
val_loss = val()