Caffe 一些使用的命令操作与常识

1. 编译好的Caffe 可以通过运行caffe time 命令,对当前平台上网络层前向/后向计算进行计时:

 ./build/tools/caffe.bin time -model examples/mnist/lenet_train_test.prototxt

2. lenet网络操作:

    ./data/mnist/get_mnist.sh   //获取mnist数据集

    ./examples/mnist/create_mnist.sh  //将下载的数据文件装换为LEVELDB或LMDB 提高IO的利用率

    ./examples/mnist/train_lenet.sh //训练数据  train_lenet.sh 脚本中的文件如下:

                    #/usr/bin/env sh

                    ./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt

 利用训练好的模型可以对测试数据集(或是外部测试集)进行预测;

./build/tools/caffe.bin test  \    表示只做预测(前向传播计算),不进行参数更新(后向传播计算)

-model examples/mnist/lenet_train_test.prototxt  \    指定模型描述文本文件。

-weights examples/mnist/lenet_iter_10000.caffemodel  \ 指定模型预先训练好的权值文件

-iterations 100   指定测试迭代次数

3. 修改Mnist例程中对LeNet-5模型稍加修改,变成图10-1所示的逻辑回归(Logistics Regression, LR)分类器

复制一份examples/mnist/lenet_train_test.prototxt, 重命名为lenet_lr.prototxt, 修改内容为下

name: "LeNet"
layer {
  name: "mnist"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    scale: 0.00390625
  }
  data_param {
    source: "examples/mnist/mnist_train_lmdb"
    batch_size: 64
    backend: LMDB
  }
}
layer {
  name: "mnist"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {
    scale: 0.00390625
  }
  data_param {
    source: "examples/mnist/mnist_test_lmdb"
    batch_size: 100
    backend: LMDB
  }
}


layer {
  name: "ip"
  type: "InnerProduct"
  bottom: "data"
  top: "ip"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 10
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}


layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "ip"
  bottom: "label"
  top: "accuracy"
  include {
    phase: TEST
  }
}
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "ip"
  bottom: "label"
  top: "loss"
}   

再复制一份examples/mnist/lenet_solver.prototxt, 重命名为lenet_lr_solver.prototxt, 修改其最后一行

solver_mode: CPU 

运行训练,在命令行输入:

./build/tools/caffe train --solver=examples/mnist/lenet_lr_solver.prototxt

最后可以获得在测试集上分类准确率为92.28的模型。


**. caffe网络结构可视化(参考21天实战caffe)

    1.准备Python环境

    sudo apt-get update

    sudo apt-get install python-pip python-dev python-numpy   里面有pip的安装方式

    sudo apt-get install gfortran

    sudo pip install -r  ./caffe/python/requirements.txt

    sudo pip install pydot

    2.编译pycaffe

    cd caffe

    make clean

    make -j

    make pycaffe

    3.绘制网格结构图

    cd ${CAFFE_ROOT}/python

python ../python/draw_net.py ./models/bvlc_reference_caffenet/train_val.prototxt caffenet.png



常识1. CUDA是由NVIDIA在2006年推出的一套针对异构计算资源(就是Inter CPU 和 自家的GPU)下的大规模并行计算的架构,包括编译器(nvcc)、开发工具、运行时库和驱动模块,是当今最流行的GPU编程环境。CUDA语法和C语言高度相似。cuDNN 是NVIDIA从2014年开始推出了面向深度学习的专用加速库。

常识2. 数据可视化,由于caffe使用了LMDB/LEVELDB的文件格式,这样做提高了数据IO的速率,但代价是,开发者无法直观的看到数据。为了获得最佳的体验,可以使用MATLAB R2014以上的版本。

常识3. 可学习参数使用Blob对象保持,必要时以二进制ProtoBuffer文件(*.caffemodel)形态序列化并粗存与磁盘上,便于进一步微调; 结果参数使用Pro头Buff文本格式(*.prototxt)描述,网格初始化时通过该描述文件构建Net对象、Layer对象形成有向无环结构,在Layer与Layer之间、Net输入源和输出陷阱均为持有数据和中间结果的Blob对象;训练超参数同样使用ProtoBuffer 文本格式(*.prototxt)描述,训练阶段利用该描述文件构建求解器(Solver)对象,该对象按照一定的规则在训练网络是自动调节这些超参数值。

常识4.

在caffe中的一个文件中lenet_solver.prototxt

转载自:https://www.zhihu.com/question/24529483/answer/114711446

一、weight decay(权值衰减)的使用既不是为了提高你所说的收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。
二、momentum是梯度下降法中一种常用的加速技术。对于一般的SGD,其表达式为 x \leftarrow  x-\alpha \ast dx, x沿负梯度方向下降。而带momentum项的SGD则写生如下形式:
v=\beta \ast v -a\ast dx\\
x \leftarrow  x+v
其中 \beta即momentum系数,通俗的理解上面式子就是,如果上一次的momentum(即 v)与这一次的负梯度方向是相同的,那这次下降的幅度就会加大,所以这样做能够达到加速收敛的过程。
三、normalization。如果我没有理解错的话,题主的意思应该是batch normalization吧。batch normalization的是指在神经网络中激活函数的前面,将 wx+b按照特征进行normalization,这样做的好处有三点:
1、提高梯度在网络中的流动。Normalization能够使特征全部缩放到[0,1],这样在反向传播时候的梯度都是在1左右,避免了梯度消失现象。
2、提升学习速率。归一化后的数据能够快速的达到收敛。
3、减少模型训练对初始化的依赖。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值