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