torch.optim.lr_scheduler.
StepLR
(optimizer, step_size, gamma=0.1, last_epoch=- 1, verbose=False)
函数作用:
每隔step_size个epoch,将学习率衰减为(上一次的学习率 * gamma)
参数说明:
optimizer (Optimizer) – 训练过程中使用的优化器.
step_size (int) – 学习率每隔多少个epoch衰减一次
gamma (float) – 学习率的衰减系数,默认为0.1
last_epoch (int) – 没太搞懂,文档中只说了设置值为-1时,将初始的学习率设置为optimizer中使用的学习率
verbose (bool) – 如果为真,每次学习率更新时在控制台打印相应信息,默认为false。
使用方式如下:
def stepLr():
lr = 0.1
model = nn.Linear(10, 1)
optimizer = torch.optim.Adam(model.parameters(), lr=lr)
scheduler = lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.1)
print(optimizer.state_dict())
for epoch in range(100):
optimizer.step()
scheduler.step()
print(optimizer.state_dict()['param_groups'][0]['lr'])
打印结果:
{'param_groups': [{'weight_decay': 0, 'eps': 1e-08, 'betas': (0.9, 0.999), 'amsgrad': False, 'lr': 0.1, 'initial_lr': 0.1, 'params': [139656888615128, 139658298281128]}], 'state': {}}
0.1
0.1
0.010000000000000002
0.010000000000000002
0.010000000000000002
0.0010000000000000002
0.0010000000000000002
0.0010000000000000002
torch.optim.lr_scheduler.
LambdaLR
(optimizer, lr_lambda, last_epoch=- 1, verbose=False)
函数作用:
根据设定的lambda表达式,设定每个epoch的学习率
参数说明:
optimizer (Optimizer) – 训练过程中使用的优化器.
lr_lambda (function or list) – 一个lambda表达式,用来计算当前epoch的学习率
last_epoch (int) – 同上
verbose (bool) – 同上
使用方式如下:
def lambdaLr():
lr = 0.1
model = nn.Linear(10, 1)
optimizer = torch.optim.Adam(model.parameters(), lr=lr)
lambda1 = lambda epoch: epoch / 10
scheduler = lr_scheduler.LambdaLR(optimizer, lambda1)
print(optimizer.state_dict())
for epoch in range(5):
optimizer.step()
scheduler.step()
print(optimizer.state_dict()['param_groups'][0]['lr'])
打印结果:
{'param_groups': [{'lr': 0.0, 'betas': (0.9, 0.999), 'params': [140612683161816, 140614092827816], 'initial_lr': 0.1, 'weight_decay': 0, 'amsgrad': False, 'eps': 1e-08}], 'state': {}}
0.010000000000000002
0.020000000000000004
0.03
0.04000000000000001
0.05
torch.optim.lr_scheduler.
MultiStepLR
(optimizer, milestones, gamma=0.1, last_epoch=- 1, verbose=False)
函数作用:
可以设置多个epoch断点,当达到设定的epoch时,按照给定的gamma衰减(可以参考StepLR)
参数说明:
optimizer (Optimizer) – 训练过程中使用的优化器.
milestones (list) – 一个设定断点的epoch列表,列表中元素必须递增
gamma (float) – 学习率的衰减系数,默认为0.1
last_epoch (int) – 同上
verbose (bool) – 同上
使用方式如下:
def multiStepLr():
lr = 0.1
model = nn.Linear(10, 1)
optimizer = torch.optim.Adam(model.parameters(), lr=lr)
scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=[3, 8], gamma=0.1)
print(optimizer.state_dict())
for epoch in range(10):
optimizer.step()
scheduler.step()
print(optimizer.state_dict()['param_groups'][0]['lr'])
打印结果:
{'param_groups': [{'betas': (0.9, 0.999), 'eps': 1e-08, 'initial_lr': 0.1, 'weight_decay': 0, 'params': [140349444681944, 140350854339752], 'amsgrad': False, 'lr': 0.1}], 'state': {}}
0.1
0.1
0.010000000000000002
0.010000000000000002
0.010000000000000002
0.010000000000000002
0.010000000000000002
0.0010000000000000002
0.0010000000000000002
0.0010000000000000002
其他的一些像torch.optim.lr_scheduler.ExponentialLR,torch.optim.lr_scheduler.CosineAnnealingLR均是随着epoch的变化来调整学习率的
torch.optim.lr_scheduler.
ReduceLROnPlateau
(optimizer, mode='min', factor=0.1, patience=10, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08, verbose=False)
函数作用:
根据一些设定的指标改变学习率
参数说明:
optimizer (Optimizer) – 训练过程中使用的优化器.
mode (str) –选择max或min。选择min后,当检测指标停止下降后,学习率会衰减;选择max后,当检测指标停止上升后,学习率会衰减。
factor (float) –学习率的衰减因子。new_lr = lr * factor,默认为0.1
patience (int) –当设定的指标没有进一步提升时设置在几个epoch之后执行学习率衰减。默认设为10.
threshold (float) – 一般不用
threshold_mode (str) – 一般不用
cooldown (int) – 一般不用
min_lr (float or list) – 一般不用
eps (float) –学习率的最小衰减,如果新的学习率和旧的学习率之差小于设定值,则不进行学习率的更新(此时学习率太小,梯度下降没有意义)
verbose (bool) – 同上
使用方式如下:
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
scheduler = ReduceLROnPlateau(optimizer, 'min')
for epoch in range(10):
train(...)
val_loss = validate(...)
# Note that step should be called after validate()
scheduler.step(val_loss)
更详细的说明参见官方文档torch.optim — PyTorch 1.10.0 documentation