caffe教程翻译:Alex’s CIFAR-10 tutorial, Caffe style

原文地址:http://caffe.berkeleyvision.org/gathered/examples/cifar10.html
本文假设caffe安装在根目录CAFFE_ROOT

数据准备

首先需要从CIFAR-10 websit网站上下载并转换数据格式。运行一下代码:

cd $CAFFE_ROOT
./data/cifar10/get_cifar10.sh
./examples/cifar10/create_cifar10.sh

如果提示wgetgunzip未安装,则需要分别安装它们。运行这些脚本后将产生数据集:./cifar10-leveldb和图像均值文件:./mean.binaryproto

模型

Cifar-10模型一个由卷积层(convolution)、池化层(pooling)、矫正线性化单元(rectified linear unit)(ReLU)非线性(nonlinearities)、局部对比正则化(local contrast normalization),并在顶层有一个线性分类器的卷积神经网络。在 CAFFE_ROOT/examples/cifar10目录下的cifar10_quick_train_test.prototxt定义了该模型。

训练并测试“快速”模型

在写好了网络定义文件和solver文件后(指MNIST Tutorial),训练十分简单。只需运行train_quick.sh或如下代码:

cd $CAFFE_ROOT
./examples/cifar10/train_quick.sh

train_quick.sh是一条简单的脚本,训练的主要工具是caffetrain动作,在solver文件中定义了它的参数。
在运行代码过程中,会在屏幕上看到以下输出:

I0317 21:52:48.945710 2008298256 net.cpp:74] Creating Layer conv1
I0317 21:52:48.945716 2008298256 net.cpp:84] conv1 <- data
I0317 21:52:48.945725 2008298256 net.cpp:110] conv1 -> conv1
I0317 21:52:49.298691 2008298256 net.cpp:125] Top shape: 100 32 32 32 (3276800)
I0317 21:52:49.298719 2008298256 net.cpp:151] conv1 needs backward computation.

这些信息详细描述了各层之间的连接和输出形状,在调试环节很有用。初始化后,训练开始:

I0317 21:52:49.309370 2008298256 net.cpp:166] Network initialization done.
I0317 21:52:49.309376 2008298256 net.cpp:167] Memory required for Data 23790808
I0317 21:52:49.309422 2008298256 solver.cpp:36] Solver scaffolding done.
I0317 21:52:49.309447 2008298256 solver.cpp:47] Solving CIFAR10_quick_train

基于solver的配置,每100次迭代打印一次loss值,每500次进行一次测试。会看到以下信息:

I0317 21:53:12.179772 2008298256 solver.cpp:208] Iteration 100, lr = 0.001
I0317 21:53:12.185698 2008298256 solver.cpp:65] Iteration 100, loss = 1.73643
...
I0317 21:54:41.150030 2008298256 solver.cpp:87] Iteration 500, Testing net
I0317 21:54:47.129461 2008298256 solver.cpp:114] Test score #0: 0.5504
I0317 21:54:47.129500 2008298256 solver.cpp:114] Test score #1: 1.27805

对于每次训练迭代,lr表示学习率,loss表示损失函数。对于带有testing短语的输出, score 0代表准确率,score 1代表损失值。
一段时间后,训练结束:

I0317 22:12:19.666914 2008298256 solver.cpp:87] Iteration 5000, Testing net
I0317 22:12:25.580330 2008298256 solver.cpp:114] Test score #0: 0.7533
I0317 22:12:25.580379 2008298256 solver.cpp:114] Test score #1: 0.739837
I0317 22:12:25.587262 2008298256 solver.cpp:130] Snapshotting to cifar10_quick_iter_5000
I0317 22:12:25.590215 2008298256 solver.cpp:137] Snapshotting solver state to cifar10_quick_iter_5000.solverstate
I0317 22:12:25.592813 2008298256 solver.cpp:81] Optimization Done.

我们的模型达到了大约75%的准确率,模型参数以二进制形式存储在文件:cifar10_quick_iter_5000中。
参考文件CAFFE_ROOT/examples/cifar10/cifar10_quick.prototxt在新的数据库上应用模型。

为何在GPU上训练

cifar*solver.prototxt文件中修改相应行,来比较CPU与GPU的训练速度:

# solver mode: CPU or GPU
solver_mode: CPU

你会发现,GPU训练更快速一些。

你可能感兴趣的:(caffe教程翻译:Alex’s CIFAR-10 tutorial, Caffe style)