您的位置:首页 > Web前端

如何生成Solver配置文件---caffe

2016-12-12 21:09 197 查看
solver是caffe的核心,也被称为优化器,在DeepLearning中通常是没有解析解的,我们只能通过优化的方案来求解,solver的主要作用就是交替调用前向传播和后向传播算法来交替更新参数。

solver的流程:

1. 设计好优化的对象---编写train.prototxt文件

2. 通过forward来计算最终的输出值,以及对应的loss

3. 通过backward计算每一层的梯度

4. 根据选用的solver算法来利用梯度进行更新

5. 定期的评价测试训练的网络

6. 记录并保存每一次迭代的学习率,快照,以及对应的状态
如何写solver文件:

from caffe.proto import caffe_pb2
s = caffe_pb2.SolverParameter()
path='/home/xxx/data/'
solver_file=path+'solver.prototxt' # solver文件保存位置

s.train_net = path+'train.prototxt' # 训练配置文件
s.test_net.append(path+'val.prototxt') # 测试配置文件
s.test_interval = 782 # 测试间隔
s.test_iter.append(100) # 测试迭代次数,结合batch_size来理解
s.max_iter = 78200 # 最大迭代次数
s.momentum = 0.9 # momentum系数
s.weight_decay = 5e-4 # 权值衰减系数

#学习率的设置在下面会详细来讲
s.base_lr = 0.001 # 基础学习率
s.lr_policy = 'step' # 学习率衰减方法
s.stepsize=10000 # 此值仅对step方法有效
s.gamma = 0.1 # 学习率衰减指数

s.display = 782 # 屏幕日志显示间隔,如果为0则不显示
s.snapshot = 7820 # 保存模型的间隔
s.snapshot_prefix = 'model/snapshot' # 保存在model文件夹下,文件名以snapshot开头
s.type = “SGD” # 优化算法
s.solver_mode = caffe_pb2.SolverParameter.GPU # 设置计算方式

with open(solver_file, 'w') as f:
f.write(str(s))

学习率的设置。只要是梯度下降法来求解优化,都会有一个学习率,也叫步长。base_lr用于设置基础学习率,在迭代的过程中,可以对基础学习率根据指定的策略进行调整,由lr_policy来设置。

lr_policy可以设置为下面这些值,相应的学习率的计算为:

- fixed:   

保持base_lr不变.

- step:    

如果设置为step,则还需要设置stepsize和gamma,返回 base_lr*gamma^(floor(iter/stepsize)),其中iter表示当前的迭代次数。

- exp:     

还需要设置gamma,返回base_lr*gamma^iter,iter为当前迭代次数

- inv:      

如果设置为inv,还需要设置power和gamma, 返回base_lr*(1+gamma*iter)^(-power)

- multistep:

s.stepvalue.append(10000)

s.stepvalue.append(20000) 

s.stepvalue.append(30000)  如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据stepvalue值变化 

- poly:     

学习率进行多项式误差,返回 base_lr (1 - iter/max_iter) ^ (power)

- sigmoid: 

学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: