当前位置:   article > 正文

mmDetection mmSegmentation 使用不同的学习率下降策略_mmsegmentation优化策略

mmsegmentation优化策略

前言

mmcv / mmDetection / mmSegmentation 的官方文档讲的很粗略(2022-04-23), 故写一篇来总结用法。
注: 举例的迭代方式为iter, 使用epoch的话其实是一样的。

版本信息

mmcv 1.4.8
mmsegmentation 0.23.0

下降策略

mmcv中的学习率下降策略有如下几种, 以Hook形式实现, 源码位置在mmcv\runner\hooks\lr_updater.py

固定学习率 FixedLrUpdater

学习率固定不下降

阶梯下降 StepLrUpdater

阶梯下降, 需要如下参数:
step 为int或list(int) 单位为iter, 若为int则代表每个阶梯的长度; 若为list(int)则为每个阶梯的位置。
gamma float, 默认为0.1, 每个阶梯对学习率的乘数。
min_lr float, 默认为None, 最小学习率。

i step 的学习率将为base_lr * (gamma**i)

在这里插入图片描述

指数下降 ExpLrUpdater

指数下降
gamma float, 指数的底数。

i iter 的学习率将为base_lr * gamma**i

用法:
在这里插入图片描述

线性下降 PolyLrUpdater

线性下降, 与其他方式不同, 线性下降与最大iter数密切相关。
power float, 默认为1., 指数。
min_lr float, 默认为0., 最小学习率。

i iter 的学习率将为(base_lr - min_lr) * (1 - i/max_iter)**power + min_lr
在这里插入图片描述

反函数下降 InvLrUpdater

反函数下降
gamma float, 底数。
power float, 默认为1., 指数。

i iter 的学习率将为base_lr * (1 + gamma * i)**(-power)
在这里插入图片描述

余弦退火 CosineAnnealingLrUpdater

余弦退火, 该方法也与最大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
  • 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)
  • 1
  • 2
  • 3
  • 4

指数下降

lr_config = dict(policy='exp',
                 gamma=0.99954,  # 0.1**(1/5000)  # 近似每 5000 iter 学习率*0.1
                 by_epoch=False)
  • 1
  • 2
  • 3

余弦退火

lr_config = dict(policy='CosineAnnealing',
                 min_lr=1e-8,
                 by_epoch=False)
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/349751
推荐阅读
  

闽ICP备14008679号