torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)
'''
Args:
1)milestones为一个数组,如 [50,70];列表中的值必须是增长的.
2)gamma,Default: 0.1.,如果learning rate开始为0.01 ,则当epoch为50时变为0.001,epoch 为70 时变为0.0001。
3)last_epoch,最后一个迭代epoch的索引. Default: -1。当last_epoch=-1,设定为初始lr。
'''
例:
criterion = nn.CrossEntropyLoss() # 损失函数为交叉熵,多用于多分类问题
optimizer = optim.SGD(net.parameters(), lr=LR, momentum=0.9, weight_decay=5e-4) # 优化方式为mini-batch momentum-SGD,并采用L2正则化(权重衰减)
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[75, 125, 165], gamma=0.1, last_epoch=-1)
......
for epoch in range(epochs):
...
for idx, (inputs,labels) in enumerate(train_dataloader,0):
...
optimizer.step()
...
scheduler.step()
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)
'''
Args:
optimizer = optim.SGD(params = model.parameters(), lr=0.05)
lambda2 = lambda epoch:0.2 ** epoch
也可把lr_lambda声明成一个函数
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda2)
'''
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)
'''
Args:
step_size:间隔步长
gamma:衰减倍数
#即每10次迭代,lr = lr * gamma
optimizer = optim.SGD(params = model.parameters(), lr=0.05)
scheduler = lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)
''''
scheduler.step()
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)
'''
Args:
T_max:半个周期
eta_min:学习率最小值
optimizer = Adam(model.parameters(),lr = LR)
scheduler = lr_scheduler.CosineAnnealingLR(optimizer, T_max = 20)
'''
5. ReduceLROnPlateau
在发现loss不再降低或者acc不再提高之后,降低学习率。
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)
'''
Args:
mode: 'min'模式检测metric是否不再减小,'max'模式检测metric是否不再增大;
factor: 触发条件后lr*=factor;
patience: 不再减小(或增大)的累计次数;
verbose: 触发条件后print;
threshold: 只关注超过阈值的显著变化;
threshold_mode: 有rel和abs两种阈值计算模式,rel规则:max模式下如果超过best(1+threshold)为显著,min模式下如果低于best(1-threshold)为显著;abs规则:max模式下如果超过best+threshold为显著,min模式下如果低于best-threshold为显著;
cooldown: 触发一次条件后,等待一定epoch再进行检测,避免lr下降过速;
min_lr: 最小的允许lr;
eps: 如果新旧lr之间的差异小与1e-8,则忽略此次更新
'''