您的位置:首页 > 其它

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文件如下:

# 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一起对损失函数进行约束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: