Solver文件
2016-07-19 19:44
183 查看
caffe程序在运行前需要首先写solver配置文件,solver的主要作用就是交替调用前向(forword)算法和后向(backword)算法来更新参数,是一种迭代的优化算法。
目前caffe中优化算法有:
1.Stochastic Gradient Descent (type: “SGD”),
2.AdaDelta (type: “AdaDelta”),
3.Adaptive Gradient (type: “AdaGrad”),
4.Adam (type: “Adam”),
5.Nesterov’s Accelerated Gradient (type: “Nesterov”)
6.RMSprop (type: “RMSProp”)
在编写Solver文件时,通过设置type类型来选择。
例程minst的Solver文件如下:
对其每一步的理解为:
这一步主要为说明对哪个网络需要优化,其网络结构在代码目录中的配置文件proto中。
在minst例程中,测试数据为10000,而我们设置每个批次(batch size)的数量为100,故总共需要迭代100次才能够运行完总测试数据。故其为迭代的次数,与batch size一起理解。
测试间隔,每训练多少次需要测试一次。
初始化学习速率。
上一次梯度更新的权值,一般取值在0.5-0.99之间,通常设为0.9,可以让使用SGD的深度学习方法更加稳定以及快速。
损失函数中参数的正则化系数(权重衰减项),防止过拟合(过度复杂)的一个参数。
lr_policy为学习率在base_lr基础上变化的策略,目前有:
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))))
每测试100次显示一次。
总共迭代的次数即总测试数据。
快照,用于设置训练多少次后进行保存。
设置保存的路径。
设置选择GPU还是CPU进行计算。
是否保存梯度值,默认为false。
保存的类型。
打印调试的信息。
规则化类型支持,与weight_decay一起对损失函数进行约束。
目前caffe中优化算法有:
1.Stochastic Gradient Descent (type: “SGD”),
2.AdaDelta (type: “AdaDelta”),
3.Adaptive Gradient (type: “AdaGrad”),
4.Adam (type: “Adam”),
5.Nesterov’s Accelerated Gradient (type: “Nesterov”)
6.RMSprop (type: “RMSProp”)
在编写Solver文件时,通过设置type类型来选择。
例程minst的Solver文件如下:
# The train/test net protocol buffer definition net: "examples/mnist/lenet_train_test.prototxt" # test_iter specifies how many forward passes the test should carry out. # In the case of MNIST, we have test batch size 100 and 100 test iterations, # covering the full 10,000 testing images. test_iter: 100 # Carry out testing every 500 training iterations. test_interval: 500 # The base learning rate, momentum and the weight decay of the network. base_lr: 0.01 momentum: 0.9 weight_decay: 0.0005 # The learning rate policy lr_policy: "inv" gamma: 0.0001 power: 0.75 # Display every 100 iterations display: 100 # The maximum number of iterations max_iter: 10000 # snapshot intermediate results snapshot: 5000 snapshot_prefix: "examples/mnist/lenet" # solver mode: CPU or GPU solver_mode: GPU
对其每一步的理解为:
net: "examples/mnist/lenet_train_test.prototxt"
这一步主要为说明对哪个网络需要优化,其网络结构在代码目录中的配置文件proto中。
test_iter: 100
在minst例程中,测试数据为10000,而我们设置每个批次(batch size)的数量为100,故总共需要迭代100次才能够运行完总测试数据。故其为迭代的次数,与batch size一起理解。
test_interval: 500
测试间隔,每训练多少次需要测试一次。
base_lr: 0.01
初始化学习速率。
momentum: 0.9
上一次梯度更新的权值,一般取值在0.5-0.99之间,通常设为0.9,可以让使用SGD的深度学习方法更加稳定以及快速。
weight_decay: 0.0005
损失函数中参数的正则化系数(权重衰减项),防止过拟合(过度复杂)的一个参数。
lr_policy: "inv" gamma: 0.0001 power: 0.75
lr_policy为学习率在base_lr基础上变化的策略,目前有:
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))))
display: 100
每测试100次显示一次。
max_iter: 10000
总共迭代的次数即总测试数据。
snapshot: 5000
快照,用于设置训练多少次后进行保存。
snapshot_prefix: "examples/mnist/lenet"
设置保存的路径。
solver_mode: GPU
设置选择GPU还是CPU进行计算。
snapshot_diff
是否保存梯度值,默认为false。
snapshot_format: 0
保存的类型。
debug_info: 0
打印调试的信息。
regularization_type: "L2"
规则化类型支持,与weight_decay一起对损失函数进行约束。