赞
踩
mmcv / mmDetection / mmSegmentation 的官方文档讲的很粗略(2022-04-23), 故写一篇来总结用法。
注: 举例的迭代方式为iter, 使用epoch的话其实是一样的。
mmcv 1.4.8
mmsegmentation 0.23.0
mmcv中的学习率下降策略有如下几种, 以Hook形式实现, 源码位置在mmcv\runner\hooks\lr_updater.py
学习率固定不下降
阶梯下降, 需要如下参数:
step 为int或list(int) 单位为iter, 若为int则代表每个阶梯的长度; 若为list(int)则为每个阶梯的位置。
gamma float, 默认为0.1, 每个阶梯对学习率的乘数。
min_lr float, 默认为None, 最小学习率。
第 i
step 的学习率将为base_lr * (gamma**i)
指数下降
gamma float, 指数的底数。
第 i
iter 的学习率将为base_lr * gamma**i
用法:
线性下降, 与其他方式不同, 线性下降与最大iter数密切相关。
power float, 默认为1., 指数。
min_lr float, 默认为0., 最小学习率。
第 i
iter 的学习率将为(base_lr - min_lr) * (1 - i/max_iter)**power + min_lr
反函数下降
gamma float, 底数。
power float, 默认为1., 指数。
第 i
iter 的学习率将为base_lr * (1 + gamma * i)**(-power)
余弦退火, 该方法也与最大iter数密切相关。
min_lr float, 默认为None, 目标学习率(target_lr)。
min_lr_ratio float, 默认为None, 目标学习率比率, 如指定则目标学习率(target_lr)为基础学习率乘以该比例, 将会覆盖min_lr的设置。
第 i
iter 的学习率将为end + 0.5 * weight * (base_lr - target_lr) * cos(pi * i/max_iter) + 1
target_lr + 0.5 * (base_lr - target_lr) * cos(pi * i/max_iter) + 1
其他的就不一一列举了, 感兴趣的去看源码: mmcv\runner\hooks\lr_updater.py
列举2种常用的学习率下降策略配置方法:
lr_config = dict(policy='step',
step=5000, # 每 5000 iter 学习率*0.1
min_lr=1e-8,
by_epoch=False)
lr_config = dict(policy='exp',
gamma=0.99954, # 0.1**(1/5000) # 近似每 5000 iter 学习率*0.1
by_epoch=False)
lr_config = dict(policy='CosineAnnealing',
min_lr=1e-8,
by_epoch=False)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。