torch.optim.lr_scheduler
模块提供了一些根据epoch训练次数来调整学习率(learning rate)的方法。一般情况下我们会设置随着epoch的增大而逐渐减小学习率从而达到更好的训练效果。
学习率的调整应放在optimizer之后。即,在训练时加入学习率优化方法的书写形式一般是:
import torch
import torch.nn as nn
from torch.optim.lr_scheduler import LambdaLR
initial_lr = 0.1
class model(nn.Module):
pass
net = model()
optimizer = torch.optim.Adam(net.parameters(), lr = initial_lr)
scheduler = LambdaLR(optimizer, lr_lambda=lambda epoch: 1/(epoch+1))
#训练
for epoch in range(100):
optimizer.zero_grad()
optimizer.step()
scheduler.step()
更多optimizer相关的介绍可以参考博客。下面介绍pytorch部分内置的学习率优化方法。
1. torch.optim.lr_scheduler.StepLR
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)
optimizer
:优化器
step_size
: 衰减步长
gamma
:衰减系数
last_epoch
: 最后一个epoch的index,如果是训练了很多个epoch后中断了,继续训练,这个值就等于加载的模型的epoch。默认为-1表示从头开始训练,即从epoch=1开始。
该学习率优化器的作用是,使学习率每过step_size个epoch,学习率变为原来的gamma倍(last_epoch=-1的情况下)。
2. torch.optim.lr_scheduler.ReduceLROnPlateau
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)
optimizer
: 优化器
mode
: mode为min时,当监测目标停止减少,lr减小,当监测目标停止增加,lr增加,默认mode=min
factor
: new_lr = lr * factor,默认为0.1
patience
: 学习率不再减小时能容忍的epoch数,默认为10
verbose
: 如果为True,打印出标准输出,默认为False
threshold
: 评价为新的最优质的阈值,只关注有价值的变化,默认为1e-4
threshold_mode
: One of rel, abs. In rel mode, dynamic_threshold = best * ( 1 + threshold ) in ‘max’ mode or best * ( 1 - threshold ) in min mode. In abs mode, dynamic_threshold = best + threshold in max mode or best - threshold in min mode. Default: ‘rel’.,
cooldown
: 当LR降低之后经过多少个epoch恢复原始的操作,默认为0
min_lr
: lr的最小边界,默认为0
eps
: 当新的学习率和旧的学习率相差eps之内就忽略,默认1-e8
本文只给出了部分学习率的优化方法,更多优化方法可以参考官方博客
参考博客
torch.optim.lr_scheduler:调整学习率
动态调整Learning Rate:TORCH.OPTIM.LR_SCHEDULER
网友评论