验证码的 lr_policy 选择

  • 2019-03-01
  • 2,328
  • 7
  • 6

lr_policy 在验证码识别中是一个需要强烈关注的东西

Caffe 中有许多学习策略

  •  fixed:   保持base_lr不变.
  • – step:    如果设置为step,则还需要设置一个stepsize,  返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数
  • – exp:     返回base_lr * gamma ^ iter, iter为当前迭代次数
  • – inv:      如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power)
  • – multistep: 如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据stepvalue值变化
  • – poly:     学习率进行多项式误差, 返回 base_lr (1 – iter/max_iter) ^ (power)
  • – sigmoid: 学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter – stepsize))

(以上来自 https://www.cnblogs.com/laowangxieboke/p/10282096.html)

而在验证码中, 最常用的是 fixed, inv, step, multistep

fixed是一条直线

可以用来手动调loss, 用来推测multistep/step的情况
一般在loss反复震荡 几千 iter 的时候可以 下调

inv是非常适合懒人的, 设置好gamma就不用管了, 不过缺点是
针对不同网络(lstm)可能会产生较慢的收敛速度

step是一个需要稍微观察规律的

合理的利用step策略可以让你的lstm收敛速度快到几个台阶, 2分钟跑完不是梦想

推荐方案1 (lstm-res18 5w samples -)
base_lr: 0.001
lr_policy: “step”
gamma: 0.9
stepsize: 1000
batch_size: 100

推荐方案2 (lstm-res18/50 20w samples+)
base_lr: 0.001
lr_policy: “step”
gamma: 0.1
stepsize: 5000
batch_size: 100

multistep 在训练resnet18 / 34 / 50中相当好用



请结合fix推测出的关键转折点使用
直接食用只要猜个大概效果也是很好的

其他

一般的样本集中
step * batch_size > samples_size * 5
的情况下依然不掉loss, 十有八九是用错了策略
可以修改参数, 或者直接改fix降低lr 再 resume 观察效果

评论

  • Rochel Rugh回复

    Good info and straight to the point. I don’t know if this is actually the best place to ask but do you guys have any ideea where to employ some professional writers? Thanks 😊

  • daqiv回复

    图都挂了

  • 走风回复

    牛逼 😯

  • zck回复

    能不能讲讲腾讯滑动验证码的破解,谢谢