MNIST是一个大型手写体数字识别数据库,广泛应用与机器学习领域的训练和测试。MNIST包括60000个训练集和10000个测试集,每张图都已经进行尺寸归一化、数据居中处理,固定大小为28×28像素。
![](https://i-blog.csdnimg.cn/blog_migrate/acff7bfaff67cb2215aebd6d7210aece.png)
下载数据集
使用Caffe源码目录中data/mnist下用get_mnist.sh脚本下载。
$ cd data/mnist/
$ ./get_mnist.sh
下载成功后在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.
在examples/mnist目录下生成了mnist_train_lmdb/ 和mnist_test_lmdb/ 两个目录,每个目录下都有两个文件:data.mdb和lock.mdb。
顾名思义,mnist_train_lmdb是LMDB格式的训练集,mnist_test_lmdb是LMDB格式的测试集。
训练网络
运行examples/mnist/train_lenet.sh脚本
$ ./examples/mnist/train_lenet.sh
数据输出最后几行如下:
训练的最终结果保存在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
命令行参数:
- test 表示只做预测
- -model examples/mnist/lenet_train_test.prototxt 指定模型描述文件
- -weights examples/mnist/lenet_iter_10000.caffemodel 指定训练好的权值文件
- iterations 100 指定测试迭代次数,每次迭代的数据量在模型描述文件中设定batch_size: 100,迭代100次刚好覆盖测试集的10000个样本。