windows下的cafee训练和测试mnist数据集

时间:2021-09-01 20:59:12

标签:

一、mnist数据集

mnist是一个手写数字数据库,由Google实验室的Corinna Cortes和纽约大学柯朗研究院的Yann LeCun等人建立,它有60000个训练样本集和10000个测试样本集。mnist数据库官方网址为: 。可直接下载四个解压文件,分别对应:训练集样本、训练集标签、测试集样本和测试集标签。解压缩之后发现,其是在一个文件中包含了所有图像。

二、caffe支持的数据格式:Lmdb和Leveldb

它们都是键/值对(Key/Value Pair)嵌入式数据库管理系统编程库。

虽然lmdb的内存消耗是leveldb的1.1倍,但是lmdb的速度比leveldb快10%至15%,更重要的是lmdb允许多种训练模型同时读取同一组数据集。

因此lmdb取代了leveldb成为Caffe默认的数据集生成格式。

三、mnist数据集的处理

caffe并不能直接使用下载得到的四个文件进行训练,而是会把它转化为lmdb或leveldb格式进行读取。目前我使用的是leveldb格式。由于还没有具体研究如何将数据集向lmdb或leveldb格式转化,所以目前使用的是网盘下载的资源,链接如下:

  提取码:xama。里面是已经经过转换的leveldb格式的训练集和测试集,将这两个文件夹直接放到\examples\mnist目录下,如下图所示:

四、训练caffe模型

训练caffe模型需要用到几个文件,首先是train_lenet.bat,打开看到其内容如下:

即该文件指定要使用lenet_solver.prototxt文件,那我们就看看该文件吧!

将最后一行solver_mode改为CPU;(为什么我不用GPU呢?后面再解释!)可以看出,这个文件是对网络训练参数进行指定:max_iter指定了最大迭代次数,默认为10000次,snapshot是输出中间结果,默认为迭代到5000次时输出中间结果。

文件的开头也指明了,使用lenet_train_test.prototxt文件指定的网络进行训练和测试。

打开lenet_train_test.prototxt,做如下修改以正确指定训练集和测试集。

其中source指定了mnist的训练集和测试集的文件夹所在路径,注意,此处是相对路径,这个很关键,原因后面再提!

backend指定了数据集的格式,使用的是leveldb

之后,点击examples/mnist目录下的train_lenet.bat批处理文件,即可实现对mnist数据集的训练,train_lenet.bat文件内容为:

cd ../../ "caffe/bin/caffe.exe" train --solver=examples/mnist/lenet_solver.prototxt pause

思为使用编译生成的caffe.exe进行训练,训练使用的解决策略由lenet_solver.prototxt来指定。

如果不出意外,等待一段时间后,即可得到如下界面:

windows下的cafee训练和测试mnist数据集

可以看到,打印信息的格式是有规律的,

左侧是caffe采用的GLOG库内方法打印的信息,这个库主要起记录日志的功能,方便出现问题时查找根源,具体格式为:

[日期] [时间] [进程号] [文件名] [行号]

往右即为当前迭代次数以及损失值(训练过程不输出准确率accuracy)。

当看到Optimization Done字样时,说明模型训练完成。训练得到的模型存储在目录\examples\mnist下(后缀名为caffemodel和solverstate),如下图所示:

分别是训练至一半和训练最终完成后的模型。接下来即可用这模型对mnist的测试集进行测试。

五、mnist数据集的测试

编译生成的caffe.exe可以直接用于测试。在目录\examples\mnist下新建mnist_test.bat批处理文件,并写入如下内容:

cd ../../ caffe\bin\caffe.exe test --model=examples\mnist\lenet_train_test.prototxt -weights=examples\mnist\lenet_iter_10000.caffemodel pause

意思是,首先是找到caffe.exe并运行->指定为测试模式->指定网络测试参数->指定模型。

运行mnist_test.bat,结果显示如下: