《智能系统与技术丛书 深度学习实践:基于Caffe的解析》—3.3.2Solver配置
3.3.2 Solver配置
Solver文件是针对构建好的网络参数模型进行学习训练的一个过程,这一过程可能会涉及优化策略、学习率调整策略、迭代次数等方面,除了训练网络构建之外,Solver是另一个我们平常称之为调参的文件,这一文件的调整将会直接影响网络收敛性及其收敛的速度。
下面先来看一下如何编写一个典型的Caffe的训练Solver文件,这个solver.prototxt是经典的AlexNet模型的训练文件。示例代码如下:
net: "models/bvlc_alexnet/train_val.prototxt"
test_iter: 1000
test_interval: 1000
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "models/bvlc_alexnet/caffe_alexnet_train"
solver_mode: GPU
以下是上述示例代码的参数说明。
batchsize:每迭代一次,通过网络训练的图片数量,例如,假设batchsize=256,则表示网络每迭代一次,将训练256张图片;也就是说,如果总图片数量为12800000张,要想将所有的图片都通过网络训练一次,则需要12800000/256=50000次迭代。
epoch:表示将所有图片在你的网络中训练一次所需要的迭代次数,例如上面提到的50000次;有些学者称之为一代,其实称为什么并不重要,我们只需要知道该参数是所有图片训练一次所需要的次数即可,其可以方便地针对不同次数的训练对比训练模型的性能,所以如果需要网络将每个样本训练100次,则总的迭代次数为max_iteration=50000*100=5000000次。
max_iteration:网络的最大迭代次数,如上面的5000000次;同理,如果max_iteration=4500000,则该网络将被训练4500000/50000=90次。该参数对应于后面讲到的Caffe源码中Solve和step判断是否要调出迭代的一个指标。
test_iter:表示测试的次数。比如,test阶段的batchsize=100,而你的测试数据为10000张图片,则测试次数为10000/100=100次,即test_iter=100。
test_interval:表示网络迭代多少次才进行一次测试,可以设置为网络训练完一代,就进行一次测试,比如前面的一代为5000次迭代的情况,就可以将test_interval设置为5000。
base_lr:表示基础学习率,在参数梯度下降优化的过程中,学习率会有所调整。
lr_policy:表示学习率改变策略,也就是使用什么方式改变学习率,以及何时进行改变。
weight_decay:表示权重衰减,用于防止过拟合。
momentum:表示上一次梯度更新的权重。
学习率调整参数及对应的学习率下降策略具体见表3-4。
表 3-4
- 点赞
- 收藏
- 关注作者
评论(0)