caffe MNIST手写数字识别例程

MNIST(Mixed National Institute of Standards and Technology)是一个大型手写体数字识别数据库,广泛应用与机器学习领域的训练和测试。MNIST包括60000个训练集和10000个测试集,每张图都已经进行尺寸归一化、数据居中处理,固定大小为28×28像素。
这里写图片描述

下载数据集

使用Caffe源码目录中data/mnist下用get_mnist.sh脚本下载。

$ cd data/mnist/
$ ./get_mnist.sh
  • 1
  • 2

下载成功后在data/mnist 目录下多出四个文件

文件名 说明
train-images-idx3-ubyte 训练集,图片
train-labels-idx1-ubyte 训练集,标签
t10k-images-idx3-ubyte 测试集,图片
t10k-labels-idx1-ubyte 测试集,标签

转换格式

下载到的数据集为二进制文件,需要转换为LMDB或LEVELDB才能被Caffe识别。

$ ./examples/mnist/create_mnist.sh
Creating lmdb...
Done.
  • 1
  • 2
  • 3

在examples/mnist目录下生成了mnist_train_lmdb/ 和mnist_test_lmdb/ 两个目录,每个目录下都有两个文件:data.mdb和lock.mdb。
顾名思义,mnist_train_lmdb是LMDB格式的训练集,mnist_test_lmdb是LMDB格式的测试集。

训练网络

目前系统还不支持GPU运行,修要将训练网络改成CPU模式。将examples/mnist/lenet_solver.prototxt最后一行修改如下

# solver mode: CPU or GPU
solver_mode: CPU
  • 1
  • 2

运行examples/mnist/train_lenet.sh脚本

$ ./examples/mnist/train_lenet.sh
  • 1

由于没有使用GPU加速,训练时间可能较长。数据输出最后几行如下

I1108 00:22:17.995280  8674 solver.cpp:454] Snapshotting to binary proto file examples/mnist/lenet_iter_10000.caffemodel
// 保存训练好的权值文件
I1108 00:22:18.007494  8674 sgd_solver.cpp:273] Snapshotting solver state to binary proto file examples/mnist/lenet_iter_10000.solverstate
// 保存训练状态
I1108 00:22:18.075494  8674 solver.cpp:317] Iteration 10000, loss = 0.00255292
I1108 00:22:18.075568  8674 solver.cpp:337] Iteration 10000, Testing net (#0)
I1108 00:22:25.076969  8674 solver.cpp:404]     Test net output #0: accuracy = 0.9908
// 最终分类准确率为 99.08%
I1108 00:22:25.077057  8674 solver.cpp:404]     Test net output #1: loss = 0.0278366 (* 1 = 0.0278366 loss)
// 最终loss值为 0.0278366
I1108 00:22:25.077070  8674 solver.cpp:322] Optimization Done.
I1108 00:22:25.077077  8674 caffe.cpp:254] Optimization Done. 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

训练的最终结果保存在examples/mnist/lenet_iter_10000.caffemodel中。

测试训练好的模型

使用MNIST测试集对训练好的模型进行测试

$ ./build/tools/caffe.bin test \
-model examples/mnist/lenet_train_test.prototxt \
-weights examples/mnist/lenet_iter_10000.caffemodel \
-iterations 100
  • 1
  • 2
  • 3
  • 4

命令行参数:

  • test 表示只做预测
  • -model examples/mnist/lenet_train_test.prototxt 指定模型描述文件
  • -weights examples/mnist/lenet_iter_10000.caffemodel 指定训练好的权值文件
  • iterations 100 指定测试迭代次数,每次迭代的数据量在模型描述文件中设定batch_size: 100,迭代100次刚好覆盖测试集的10000个样本。
转自:http://blog.csdn.net/u013407923/article/details/53075396

MNIST(Mixed National Institute of Standards and Technology)是一个大型手写体数字识别数据库,广泛应用与机器学习领域的训练和测试。MNIST包括60000个训练集和10000个测试集,每张图都已经进行尺寸归一化、数据居中处理,固定大小为28×28像素。
这里写图片描述

下载数据集

使用Caffe源码目录中data/mnist下用get_mnist.sh脚本下载。

$ cd data/mnist/
$ ./get_mnist.sh
  • 1
  • 2

下载成功后在data/mnist 目录下多出四个文件

文件名 说明
train-images-idx3-ubyte 训练集,图片
train-labels-idx1-ubyte 训练集,标签
t10k-images-idx3-ubyte 测试集,图片
t10k-labels-idx1-ubyte 测试集,标签

转换格式

下载到的数据集为二进制文件,需要转换为LMDB或LEVELDB才能被Caffe识别。

$ ./examples/mnist/create_mnist.sh
Creating lmdb...
Done.
  • 1
  • 2
  • 3

在examples/mnist目录下生成了mnist_train_lmdb/ 和mnist_test_lmdb/ 两个目录,每个目录下都有两个文件:data.mdb和lock.mdb。
顾名思义,mnist_train_lmdb是LMDB格式的训练集,mnist_test_lmdb是LMDB格式的测试集。

训练网络

目前系统还不支持GPU运行,修要将训练网络改成CPU模式。将examples/mnist/lenet_solver.prototxt最后一行修改如下

# solver mode: CPU or GPU
solver_mode: CPU
  • 1
  • 2

运行examples/mnist/train_lenet.sh脚本

$ ./examples/mnist/train_lenet.sh
  • 1

由于没有使用GPU加速,训练时间可能较长。数据输出最后几行如下

I1108 00:22:17.995280  8674 solver.cpp:454] Snapshotting to binary proto file examples/mnist/lenet_iter_10000.caffemodel
// 保存训练好的权值文件
I1108 00:22:18.007494  8674 sgd_solver.cpp:273] Snapshotting solver state to binary proto file examples/mnist/lenet_iter_10000.solverstate
// 保存训练状态
I1108 00:22:18.075494  8674 solver.cpp:317] Iteration 10000, loss = 0.00255292
I1108 00:22:18.075568  8674 solver.cpp:337] Iteration 10000, Testing net (#0)
I1108 00:22:25.076969  8674 solver.cpp:404]     Test net output #0: accuracy = 0.9908
// 最终分类准确率为 99.08%
I1108 00:22:25.077057  8674 solver.cpp:404]     Test net output #1: loss = 0.0278366 (* 1 = 0.0278366 loss)
// 最终loss值为 0.0278366
I1108 00:22:25.077070  8674 solver.cpp:322] Optimization Done.
I1108 00:22:25.077077  8674 caffe.cpp:254] Optimization Done. 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

训练的最终结果保存在examples/mnist/lenet_iter_10000.caffemodel中。

测试训练好的模型

使用MNIST测试集对训练好的模型进行测试

$ ./build/tools/caffe.bin test \
-model examples/mnist/lenet_train_test.prototxt \
-weights examples/mnist/lenet_iter_10000.caffemodel \
-iterations 100
  • 1
  • 2
  • 3
  • 4

命令行参数:

  • test 表示只做预测
  • -model examples/mnist/lenet_train_test.prototxt 指定模型描述文件
  • -weights examples/mnist/lenet_iter_10000.caffemodel 指定训练好的权值文件
  • iterations 100 指定测试迭代次数,每次迭代的数据量在模型描述文件中设定batch_size: 100,迭代100次刚好覆盖测试集的10000个样本。
转自:http://blog.csdn.net/u013407923/article/details/53075396

猜你喜欢

转载自blog.csdn.net/qq_29259155/article/details/78191515
今日推荐