先看在python里面写solver文件需要有哪些参数:
其中主要的几个参数区别test_interval,test_iter,max_iter,在这里已经介绍过caffe的solver文件参数详解–caffe学习(2)
接下来看自己跑实验室这些参数应该怎么设置,这里都以SGD为例:
设定学习率 α 和动量 μ 的经验法则:
base_lr: 0.01 # 开始学习速率为: α = 0.01=1e-2
lr_policy: "step" # 学习策略: 每 stepsize 次迭代之后,将 α 乘以 gamma
gamma: 0.1 # 学习速率变化因子
stepsize: 100000 # 每 100K 次迭代,降低学习速率
max_iter: 350000 # 训练的最大迭代次数 350K
momentum: 0.9 # 动量 momentum 为: μ = 0.9
有了上面的理论基础,我们现在可以设计自己的SGD slover文件参数了:
首先明白有几个参数是需要计算的而不是随便多少:
这里假设你的训练集样本有9000个,val集有1000个,
batch_size:训练集16,val:32
那么这里你的
test_iter=1000/32=32
test_interval=9000/16=263
一般还要设计另一个参数使得每次估计的梯度更准确:
iter_size:每次取iter_size个batch_size数据来估计当前的梯度
iter_size=8
接下来要设计的重要参数是max_iter,他决定了你的样本一共训练多少次,一般取test_interval的3倍到6倍。
max_iter=1000
然后SGD的其他参数就用上文caffe官网推荐 的参数:
base_lr: 0.01 # 开始学习速率为: α = 0.01=1e-2
lr_policy: "step" # 学习策略: 每 stepsize 次迭代之后,将 α 乘以 gamma
gamma: 0.1 # 学习速率变化因子
stepsize: 100000 # 每 100K 次迭代,降低学习速率
momentum: 0.9 # 动量 momentum 为: μ = 0.9
但是这里的stepsize不能取这么大,一般让一个epoch用一个学习率,因此一般让stepsize=test_interval=9000/16=263
其他的参数就无关紧要了。
s.display = 20 # 屏幕日志显示间隔
s.snapshot = s.max_iter # 保存model间隔
#注意deploy的时候是不需要snapshot_prefix的
s.snapshot_prefix = save_model_prefix # 保存的model前缀
s.type = 'SGD' # 优化算法
然后就让程序跑起来,就看着loss降低吧