caffe solver参数详解
本文出处:https://www.cnblogs.com/denny402/p/5074049.html
1,epoch :一个epoch就是所有训练图片的一次传播,一次传播=一次前线传播+一次后项传播
2,batch size :batch_size的值就是一次迭代输入多少张图片,test阶段的batch_size=50,则一次迭代输入50张测试图片;train的batch_size=100,则一次迭代输入100张训练图片。batch_size越高,所需的内存越大
3,迭代次数 :迭代=传播=前向传播+后向传播
4,如果有10000个训练图片,2000张测试图片。训练的batch_size为100,测试的为50,test_iter为40,tese_interval=100;则每迭代100次(每次迭代输入100张训练图片),进行一次测试,一次测试输入50张图片,共进行40次测试。这样说的话意味着:max_iter/迭代次数==test_iter?也就是说max_iter>=10000/100*40=4000次?至少把训练集循环一遍
5,test_iter: 250 :和test_batch_size结合,test的batch_size * test_iter=test images
6,test_interval: 1000 :每1000次迭代进行一次测试
7,momentum: 0.9 :上一次梯度更新的权重
8,weight_decay: 0.0005 :权重衰减项,防止过拟合
9,base_lr: 0.0001 :基础学习率
10,lr_policy: "inv" :学习策略:‘’inv“,
学习率有以下几种:
- - 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))))
(1)gamma: 0.0001 :inv学习策略的参数
(2)power: 0.75 :inv学习率的参数
11,display: 100 :每训练100次,在屏幕上显示一次
# The maximum number of iterations
12,max_iter: 500 :训练的最大迭代次数,max_iter * train_batch_zise(train images;设置太小,会不收敛,精确度很低;太大会振荡,浪费时间
# snapshot intermediate results
13,snapshot: 1000 :进行1000次迭代后进行保存solver和caffemodel
14,snapshot_prefix: "examples/cell/cell_model_lmdb" :保存的位置
# solver mode: CPU or GPU
15,solver_mode: GPU :使用Gpu进行训练