Solver的流程:
设计好需要优化的对象,以及用于学习的训练网络和用于评估的测试网络。(通过调用另外一个配置文件prototxt来进行)
通过forward和backward迭代的进行优化来跟新参数。
定期的评价测试网络。 (可设定多少次训练后,进行一次测试)
在优化过程中显示模型和solver的状态
在每一次的迭代过程中,solver做了这几步工作:
1、调用forward算法来计算最终的输出值,以及对应的loss
2、调用backward算法来计算每层的梯度
3、根据选用的slover方法,利用梯度进行参数更新
4、记录并保存每次迭代的学习率、快照,以及对应的状态。
/*这个文件主要包含了一些求解网络,梯度下降参数、迭代次数等参数*/
net: "network/Part_B/MCNN/train.prototxt"//网络名称
display : 1000//每1000次显示一次
base_lr : 1e-6//基础学习率0.01
lr_policy : "multistep"//学习策略,"multistep"还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据 stepvalue值变化
gamma : 0.1
stepvalue : [500000, 800000, 1000000]
max_iter : 1200000 //最大迭代次数
momentum : 0.9//动量参数 ,不需要修改
weight_decay : 0.0005//权重衰减系数
snapshot : 10000//每迭代10000次,保存一次结果
average_loss : 3600
snapshot_prefix : "trainedmodel/Part_B/MCNN/MCNN"//保存结果路径
solver_mode : GPU