-
关于初始学习率
- 尽量使用大的学习率,因为很多研究都表明更大的学习率有利于提高泛化能力
- 和数据量的关系:学习率一般也需要随着训练数据量的增大而适当降低
- 和batch_size的关系:更小的bath_size需要更小的学习率
-
Pytorch学习率调整策略通过 torch.optim.lr_sheduler 接口实现。pytorch提供的学习率调整策略分为三大类,分别是:
- 有序调整:等间隔调整(Step),多间隔调整(MultiStep),指数衰减(Exponential),余弦退火(CosineAnnealing);
- 自适应调整:依训练状况伺机而变,通过监测某个指标的变化情况(loss、accuracy),当该指标不怎么变化时,就是调整学习率的时机(ReduceLROnPlateau);
- 自定义调整:通过自定义关于epoch的lambda函数调整学习率(LambdaLR)
-
在每个epoch的训练中,使用step()语句进行学习率更新,此方法类似于optimizer.step()更新模型参数
optimizer = torch.optim.Adam(model.parameters(), lr=0.0003, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False) ExpLR = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.9999) for epoch in range(epoch_num): for step, (batch_x, batch_y) in enumerate(loader): y_pred = model(batch_x) loss = loss_func(y_pred, batch_y) optimizer.zero_grad() loss.backward() optimizer.step() ExpLR.step() # 每个epoch衰减一次学习率
-
Pytorhc中学习率衰减类型
-
等间隔调整学习率 StepLR
- 含义: 每训练step_size个epoch,学习率调整为lr=lr*gamma.
- 参数:
- optimizer: 神经网络训练中使用的优化器,如optimizer=torch.optim.SGD(…)
- step_size(int): 学习率下降间隔数,单位是epoch,而不是iteration.
- gamma(float): 学习率调整倍数,默认为0.1
- last_epoch(int): 上一个epoch数,这个变量用来指示学习率是否需要调整。当last_epoch符合设定的间隔时,就会对学习率进行调整;当为-1时,学习率设置为初始值
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)
-
多间隔调整学习率 MultiStepLR
- 含义: 学习率调整的epoch间隔并不是相等的,如epoch=10时调整一次,epoch=30时调整一次,epoch=80时调整一次
- 参数:
- milestone(list): 一个列表参数,表示多个学习率需要调整的epoch值,如milestones=[10, 30, 80]
- 其它参数同等间隔方式
torch.optim.lr_sheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)
-
指数衰减调整学习率 ExponentialLR
- 含义: 学习率呈指数型衰减,每训练一个epoch,lr=lr * pow(gamma, epoch)
- 参数:
- gamma(float):学习率调整倍数的底数,指数为epoch
torch.optim.lr_sheduler.ExponentialLR(optimizer, gamma, last_epoch)
-
余弦退火函数调整学习率CosineAnnealingLR
-
含义: 学习率呈余弦函数型衰减,并以2*T_max为余弦函数周期,整个走势如同Cos(x)
-
参数:
- T_max(int): 学习率下降到最小值时的epoch数,即当epoch=T_max时,学习率下降到余弦函数最小值,一般Tmax=epochs总数
- eta_min: 学习率调整的最小值,即epoch=T_max时,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yNCxUZSI-1615865569968)(https://math.jianshu.com/math?formula=lr_{min}%3D)]eta_min, 默认为0
torch.optim.lr_sheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)
-
-
根据指标调整学习率 ReduceLROnPlateau
-
含义: 当某指标(loss或accuracy)在最近几个epoch中都没有变化(下降或升高超过给定阈值)时,调整学习率。
如当验证集的loss不再下降时调整学习率;或监察验证集的accuracy不再升高时,调整学习率。 -
参数:
-
mode(str): 模式选择,有min和max两种模式,min表示当指标不再降低(如监测loss),max表示当指标不再升高(如监测accuracy)
-
factor(float): 学习率调整倍数,同前面的gamma,当监测指标达到要求时,lr=lr * factor
-
patience(int): 忍受该指标多少个epoch不变化,当忍无可忍时,调整学习率
-
verbose(bool): 是否打印学习率信息,默认为False, 即不打印该信息
-
threshold_mode (str): 选择判断指标是否达最优的模式,有两种模式:‘rel’ 和 ‘abs’.
当threshold_mode == rel, 并且 mode == max时,dynamic_threshold = best * (1 + threshold);
当threshold_mode == rel, 并且 mode == min时,dynamic_threshold = best * (1 - threshold);
当threshold_mode == abs, 并且 mode == max时,dynamic_threshold = best + threshold;
当threshold_mode == abs, 并且 mode == min时,dynamic_threshold = best - threshold; -
threshold(float): 配合threshold_mode使用。
-
cooldown(int): “冷却时间”,当调整学习率之后,让学习率调整策略冷静一下,让模型在训练一段时间,再重启监测模式。
-
min_lr(float or list): 学习率下限,可为float,或者list,当有多个参数组时,可用list进行设置。
-
eps(float): 学习率衰减的最小值,当学习率的变化值小于eps时,则不调整学习率
-
torch.optim.lr_sheduler.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)
-
-
神经网络调优 ---学习率lr
猜你喜欢
转载自blog.csdn.net/hechao3225/article/details/114873489
今日推荐
周排行