在caffe.proto中,指数学习率衰减的解释如下:
exp: return base_lr * gamma ^ iter
相应地,它是implemented:
else if (lr_policy == "exp") {
CHECK_GE(this->param_.gamma(), 0);
rate = this->param_.base_lr() * pow(this->param_.gamma(), this->iter_);
}
但是,实际上,当我使用它时,实际上得到的结果是:
return base_lr * gamma
这是一个示例日志,其中,学习率每6400次迭代就下降一次。如果您做数学运算,您可以清楚地看到,当前的迭代次数(6400)没有考虑在内!
I0205 20:05:37.391410 31809 sgd_solver.cpp:106] Iteration 6360, lr = 0.045
I0205 20:05:55.309510 31809 sgd_solver.cpp:106] Iteration 6400, lr = 0.0432
...
I0205 20:53:43.700938 31809 sgd_solver.cpp:106] Iteration 12800, lr = 0.041472
...
I0205 21:41:31.385784 31809 sgd_solver.cpp:106] Iteration 19200, lr = 0.0398131
I0205 21:41:49.302739 31809 sgd_solver.cpp:106] Iteration 19240, lr = 0.0398131
这也是一个快速测试:Click运行。输出:
the result of lr*gamma**iter = 1.545624406753422e-115
initial lr: 0.045
decaying the lr, (lr*gamma):
0.043200
0.041472
0.039813
0.038221
我很困惑,为什么不考虑当前的迭代?如果可以,为什么会这样呢?