深度学习caffe--手写字体识别例程(一)——运行手写字体识别例程

    学习caffe深度学习框架时,最基本的一个应用实例是手写字体识别例程,这是caffe自带的例程,通过这个例程可以了解caffe框架使用的一个基本流程。在这个例程中,知识点比较多,在这篇文章中,我们只关系操作相关的内容,不进行代码和理论分析,让大家先把例程跑通,然后再分成几篇文章对这个例程的知识点进行介绍。
    这个例程的样板是MNIST数据集,它是一个大型手写体数字的数据库,包含了60000个训练集和10000个测试集,每张图都已经进行了尺寸归一化,数字居中处理,固定尺寸为28像素X28像素。数据集的样本如下图所示。这个例程我们使用这个数据库对caffe网络进行训练,并用训练的网络进行预测。

1、下载MNIST数据集

        这个例程,我们在caffe的安装目录下进行,首先我们在终端中进入到caffe安装目录,然后执行下面的命令

cd data/mnist
./get_mnist.sh

这两个命令的作用是进入到mnist文件夹,并且采用get_mnist.sh脚本文件来下载MNIST数据集。成功执行命令之后,在文件夹下下载下来4个文件,分别为:t10k-images-idx3-ubyte、t10k-labels-idx1-ubyte、 train-images-idx3-ubyte、train-labels-idx1-ubyte。它们分别是测试集图片文件、测试集标签文件、训练集图片文件、训练集标签文件。
        关于这些文件的详解,会在后面的文章中进行。这里可以先不管这几个文件。

2、数据集格式转换

        上一步我们下载到的数据集为二进制文件,无法直接用于caffe网络的训练,我们需要把它准话为LMDB格式的文件。
在caffe的根目录下,执行下面的命令

./examples/mnist/create_mnist.sh

执行完之后,在example/mnist/目录下,生成了两个文件夹mnist_train_lmdb和mnist_test_lmdb,在这两个文件夹下每个文件夹下包含两个文件data.mdb和lock.mdb。这4个文件就是转换完成的LMDB格式的训练集和测试集文件。

3、训练模型

        在这个实例中,我们使用的深度学习网络为LeNet-5网络模型,它的描述文件为examples/mnist/lenet_train_test.prototxt,训练和测试的求解器的描述文件为examples/mnist/lenet_solver.prototxt。

        这一步我们对模型参数进行训练,在训练之前首先打开lenet_solver.prototxt文件。文件的最后一行修改为

solver_mode: CPU

即采用CPU模式。
        在caffe根目录下采用下面的命令对模型进行训练

./examples/mnist/train_lenet.sh

模型开始训练,在终端上会打印出训练日志,训练日志内容比较多,经过我们以后的讲解后我们会明白训练日志的每一条的作用,这里我们先不用深究日志的内容。训练日志的最后,如下所示。

I0207 15:20:14.125481  7502 solver.cpp:414]     Test net output #0: accuracy = 0.9913
I0207 15:20:14.125722  7502 solver.cpp:414]     Test net output #1: loss = 0.0262061 (* 1 = 0.0262061 loss)
I0207 15:20:14.125864  7502 solver.cpp:332] Optimization Done.
I0207 15:20:14.125982  7502 caffe.cpp:250] Optimization Done.

打印出了测试的识别精度和损失。

        训练之后,在/examples/mnist/目录下生成了四个新的文件:lenet_iter_5000.caffemodel、lenet_iter_5000.solverstate、lenet_iter_10000.caffemodel、lenet_iter_10000.solverstate,它们分别为进行了5000次和10000次迭代式生成的快照,快照包含权值文件.caffemodel和求解器状态文件.solverstate。

4、数据预测

        在上一步中,我们完成了模型的训练,这一步,我们用训练好的模型参数进行预测,在caffe根目录下执行下面的命令

./build/tools/caffe.bin test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -iterations 100

这个命令是调用caffe.bin对模型的识别效果进行预测,test表示处于测试状态,-model examples/mnist/lenet_train_test.prototxt指定了预测使用的模型,与我们训练时使用的模型一样,-weights examples/mnist/lenet_iter_10000.caffemodel指定预测使用的权值文件为我们上一步训练得到的权值文件,-iterations 100表示迭代次数为100次。

        执行之后,在终端中打印的日志的最后两行为

I0217 13:54:22.387477 28867 caffe.cpp:321] accuracy = 0.9913
I0217 13:54:22.387509 28867 caffe.cpp:321] loss = 0.0262061 (* 1 = 0.0262061 loss)

给出了识别精度和损失。至此我们完成了手写字体识别的例程测试。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值