什么是Caffe?

参考博客 Errors_In_Life

  1. Caffe,全称Convolutional Architecture for Fast Feature Embedding,中文名:卷积神经网络框架
  2. 基本概念
  • 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的求解
  1. 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。执行完一次全部数据,则称之为一个epoch
  • test_interval:500: 测试间隔,即每训练500次,才进行一次测试
  • base_lr: 0.01
    lr_policy: "inv"
    gamma: 0.0001
    power: 0.75
    
    学习率的设置,base_lr用来设置基础学习率,在迭代的过程中,可以对基础学习率进行调整,调整的策略由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
  1. 参数含义:
    iter_size:iter_size=accum_batch_size/batch_size这个参数乘上你的train prototxt中的batch size是你实际使用的batch size。 相当于读取batchsize*itersize个图像才做一下gradient decent。 这个参数可以规避由于gpu不足而导致的batchsize的限制 因为你可以用多个iteration做到很大的batch 即使单次batch有限
原文地址:https://www.cnblogs.com/qiulinzhang/p/9513359.html