zoukankan      html  css  js  c++  java
  • 什么是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有限
  • 相关阅读:
    【BZOJ3144】切糕(HNOI2013)-最小割
    【BZOJ1934】善意的投票(SHOI2007)-最小割
    【BZOJ2125】最短路-圆方树+倍增LCA
    【BZOJ4868】期末考试(六省联考2017)-三分
    【BZOJ1951】古代猪文(SDOI2010)-数论大集合
    【BZOJ2257】瓶子和燃料(JSOI2009)-裴蜀定理+排序
    【BZOJ1485】有趣的数列(HNOI2009)-卡特兰数+线性筛
    【51Nod1952】栈-单调栈+单调队列
    【BZOJ4517】排列计数(SDOI2016)-组合数学:错排
    【BZOJ2111】排列计数(ZJOI2010)-DP+Lucas定理
  • 原文地址:https://www.cnblogs.com/qiulinzhang/p/9513359.html
Copyright © 2011-2022 走看看