mmdetection中param_scheduler解读

param_scheduler = [ 
dict( type=‘LinearLR’, start_factor=0.01, by_epoch=False, begin=0, end=500), 
dict( type=‘CosineAnnealingLR’, begin=0, end=24, by_epoch=True, min_lr_ratio=0.01) ]

type指定了学习率调整策略的类型,其中包含两种不同的学习率调整方式。
start_factor表示初始学习率因子(即开始训练时学习率相对于最大学习率的比例),默认为0.01。在第一个学习率调整阶段中,将根据该因子和begin、end参数计算出初始学习率。
by_epoch表示是否按照epoch来更新学习率,如果为True,则每个epoch结束后会更新一次学习率;否则会按照迭代次数来更新学习率。
对于第一个学习率调整阶段使用线性策略(LinearLR),begin表示开始更新学习率的迭代次数(或epoch数),end表示结束更新学习率的迭代次数(或epoch数)。在这个示例中,我们设置begin=0、end=500,表示前500个迭代或前500个epoch内应用线性学习率调整方式。
对于第二个学习率调整阶段余弦退火策略(CosineAnnealingLR),begin和end参数分别表示开始和结束更新学习率的epoch数,min_lr_ratio表示最小学习率与最大学习率之间的比率(最小学习率等于最大学习率乘以该比率)。在这个示例中,我们设置begin=0、end=24,表示前24个epoch应用余弦退火学习率调整方式。

有人可能认为这两个策略是重复的,其实不是的。因为第一个策略的by_epoch是False,表示按照迭代次数来调整学习率,而第二个策略的by_epoch是True,表示按照epoch来调整学习率。所以第一个策略只在前500个迭代次数生效,而第二个策略在整个训练过程中生效,但是在前500个迭代次数内,它的学习率和第一个策略一样,所以不会有冲突。

猜你喜欢

转载自blog.csdn.net/weixin_45921929/article/details/131150945