语言选择: 简体中文简体中文 line EnglishEnglish

公司动态

【OpenPCDet】优化器之adam_oncycle

? ? OpenPCDet到目前版本(v 0.3.0)为止集成的优化器有3种:adam,sgd和adam_onecyel。这个可见代码build_optimizer(model,optim_cfg)函数。

 

平常训练用得较多的是adam_onecycle。它本质上是adam优化器再加上onecycle学习率调整策略。我比较关心的是这个onecycle的学习率调整策略,在这里使用一个少量样本的训练集来认识一下关于onecycle学习率调整中涉及到的若干参数。

 

我设置的训练集样本为100,BATCH_SIZE为5,总的训练epochs数num_epochs为100。按此计算的话,总的训练迭代次数为200。训练过后得到的lr曲线如下:?

?我把要关注的几个点在图中以红色圆圈标示了出来。从左至右,第一个红圈为学习率的起点low_lr,它的值是由配置文件中给定的两个参数LR和DIV_FACTOR计算得到,low_lr = LR / DIR_FACTOR,即0.0003。第二个红圈是学习率最大的地方lr_max,它正是配置文件中设置的LR,值为0.003。第三个红圈为训练结束时学习率lr_end。

 

总的说的,adam_oncycle中学习率曲线的变化分成两个部分。第一个部分是由low_lr上升到lr_max,这一部分由PCT_START这个系数控制上升阶段的迭代次数(PCT_START*num_total_iters),由cos函数控制调整步长。第二部分是学习率由lr_max下降到lr_end,剩余迭代次数当然就是(1-PCT_START)*num_total_iters,同样是由cos函数控制调整步长。?在具体的训练任务中,通过合理地调整LR、PCT_START等参数来使训练任务达到最优。至于配置文件中的其它参数,如:DECAY_STEP_LIST、LR_DECAY、LR_DECAY_STEP等,在adam_onecycle优化器中并未使用到。

平台注册入口