什么是Caffe?
- Caffe,全称Convolutional Architecture for Fast Feature Embedding,中文名:卷积神经网络框架
- 基本概念
- Blobs: Caffe使用blobs结构来存储,交换和处理网络中正向和反向迭代时的数据和导数信息,有统一的接口类型
- Layers: layer是Caffe模型和计算的基本单元
- Nets: Net是一系列 layers 和其连接的集合
- Forward and Backward: Caffe得两条计算生命线,Forward产生loss和输出结果;BackWard 产生反向梯度
- Loss:计算真实值和预测值之间的误差,指导下一步工作,由loss定义待学习的任务
- Solver: solver协调模型的优化
- Layer Catalogue: 学习Caffe中构建先进模型所需的各种层的功能
- Interface:Caffe的命令行、python和matlab版接口
- 总体印象:Blob包含在Layer里包含在Net里,Solver时Net的求解
- solver.prototxt
net: "examples/mnist/lenet_train_test.prototxt"
test_iter: 100
test_interval: 500
base_lr: 0.01
momentum: 0.9
type: SGD
weight_decay: 0.0005
lr_policy: "inv"
gamma: 0.0001
power: 0.75
display: 100
max_iter: 20000
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
solver_mode: CPU
- net: "examples/mnist/lenet_train_test.prototxt"
设置深度网络模型,每个模型就是一个net,需要在一个专门的配置文件中对net进行配置 文件的路径从caffe得根目录开始,也可以用train_net和test_net来对训练模型和测试模型分别设定,例如:train_net: "examples/hdf5_classification/logreg_auto_train.prototxt" test_net: "examples/hdf5_classification/logreg_auto_test.prototxt"
test_iter:100
: 与test_layer中的batch_size结合起来理解,mnist数据中测试样本总数为10000,一次性执行全部数据效率很低,因此我们需要将数据分为几个批次来执行,每个批次的数量就是batch_size。设batch_size为100,则需要迭代100次才能将10000个数据全部执行完。因此设置test_iter为100。执行完一次全部数据,则称之为一个epochtest_interval:500
: 测试间隔,即每训练500次,才进行一次测试-
学习率的设置,base_lr用来设置基础学习率,在迭代的过程中,可以对基础学习率进行调整,调整的策略由base_lr: 0.01 lr_policy: "inv" gamma: 0.0001 power: 0.75
lr_policy
来设置fixed
: 保持base_lr不变step
: 如果设置为step,则还需要设置一个stepsize, 返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数exp
: 返回base_lr * gamma ^ iter, iter为当前迭代次数inv
: 如果设置为inv,还需要设置一个power和gamma, 返回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))))
momentum:0.9
: 上次梯度的更新权重type
: 优化算法选择,默认为SGD,总共有6种方法供选
AdaDelta (type: "AdaDelta"),
Adaptive Gradient (type: "AdaGrad"),
Adam (type: "Adam"),
Nesterov’s Accelerated Gradient (type: "Nesterov") and
RMSprop (type: "RMSProp")weight_decay:0.0005
: 权重衰减项,用于防止过拟合一个参数display: 100
: 每训练100次在屏幕上显示一次,若为0则不显示max_iter: 20000
: 最大迭代次数,这个数设置太小,会导致没有收敛,精确度很低。设置太大,会导致震荡,浪费时间。snapshot:5000
:将训练出来的model和solver状态进行保存,snapshot用于设置训练多少次后进行保存,默认为0,不保存snapshot_prefix: "examples/mnist/lenet"
: 设置保存路径;还可以设置snapshot_diff
:是否保存梯度值,默认为False,不保存solver_mode: GPU
: 设置运行模式,默认为GPU
- 参数含义:
iter_size:iter_size=accum_batch_size/batch_size
这个参数乘上你的train prototxt中的batch size是你实际使用的batch size。 相当于读取batchsize*itersize个图像才做一下gradient decent。 这个参数可以规避由于gpu不足而导致的batchsize的限制 因为你可以用多个iteration做到很大的batch 即使单次batch有限