darknet源码之学习率调整

下面将描述的是基于yolov2.cfg文件,对于学习率的调整方法

缩写

lr = learning rate
bn = batch size

主要文件

读取cfg配置参数的主要文件为src/parser.c
yolov2.cfg中相关部分

learning_rate=0.001
burn_in=1000
max_batches = 500200
policy=steps
steps=400000,450000
scales=.1,.1

这里有很多的参数读入,我们此处只关心学习率。
学习率受到多个参数控制,首先我们先找到burn_in

net->burn_in = option_find_int_quiet(options, "burn_in", 0);

读入的burn_in在src/network.c中的

float get_current_rate(network *net)

函数中使用到了
这里利用了bn和burn_in进行对比,返回一个新的当前学习率

if (batch_num < net->burn_in) return net->learning_rate * pow((float)batch_num / net->burn_in, net->power);

完成burn_in个batch之后,下面学习率更新将根据net->policy进行选择,而yolov2中选择的policy为
steps
还是在这个函数中,跳到STEPS的case查看,记住yolov2.cfg中引入的steps和scales

switch (net->policy) {
        ...
        case STEPS:
            rate = net->learning_rate;
            for(i = 0; i < net->num_steps; ++i){
                if(net->steps[i] > batch_num) return rate;
                rate *= net->scales[i];
            }
            return rate;

分析这段代码,可以知道,learning rate在bn到了一定的值之后,会让rate缩小scale的倍数,再进行返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值