Caffe学习总结(三)——mnist手写字库识别例程(1)

来源:互联网 发布:storm编程 书籍下载 编辑:程序博客网 时间:2024/05/19 09:01

了解了几天的caffe,今天终于开始跑第一个例程了,使用caffe进行手写数字识别。此库使用了比较流行的数字库mnist。可以从官网中了解到mnist总共有60000张样例图像,其中10000张用于测试使用,50000张用于学习训练。这些数据已经序列化成一定的格式。
刚刚搭建起caffe的环境,于是就想跑一个测试程序,尝试体验一下caffe。没想到遇到一大堆没有看明白的东西,差点放弃。后来经过认真看了下caffe.cpp,然后在官网上阅读了caffe的基础教程。幸好曾经对神经网络和机器学习有一定的积累。看起来还是轻松了很多。于是,当看到大神很多直接就写出来一个命令进行训练mnist。我尝试下,没想到各种错误。所以不想后续学习caffe的人再次重蹈的痛苦过程。

学习caffe官网中mnist的讲解以及自己的修改

打开caffe官网mnist学习教程:http://caffe.berkeleyvision.org/gathered/examples/mnist.html

1)准备数据集。

(官网上是采用的shell脚本进行数据集下载并且转换成mnist需要的lmdb格式文件)。由于我使用的是win7系统。显然这一步不是太适合我的实际情况。因此我打开了get_mnist.sh文件,发现就是在mnist官网下载数据集。因此进入mnist官网:http://yann.lecun.com/exdb/mnist/下载mnist数据集。然后再对数据集进行转换,再次打开create_mnist.sh脚本,发现就是使用convert_mnist_data程序将数据进行转换成lmdn文件。由于我在win7系统,编译caffe提供的convert_mnist_data工程,在build目录下生成convert_mnist_data.exe程序。然后编写一个批处理,将完成对mnist数据集的转换。转换过程中会出现一些问题。例如mdb_env_set_mapsize failed则表示设置的初始化的空间太大。因为工程中默认设置的是1TB大小,一般我们的空间都不足的。因此我修改了。如果提示mdb_put failed,则有可能是设置的空间太小了。因此我们需要修改CHECK_EQ(mdb_env_set_mapsize(mdb_env, 1099511627776), MDB_SUCCESS) // 1TB
修改成
CHECK_EQ(mdb_env_set_mapsize(mdb_env, 1073741824), MDB_SUCCESS) // 1 GB
然后再编译convert_mnist_data工程。最后执行批处理我写成如下:

set DATA=./mnist#设置下载字库,存储在.\examples\mnist\mnist目录set TOOLS=../../Build/x64/Debug  #convert_mnist_data.exe目录#转换格式leveldb或lmdbREM set BACKEND=leveldbset BACKEND=lmdbecho "Creating %BACKEND%..."#创建两个目录,一个存储训练集一个存储测试集rd /s /q "mnist_train_%BACKEND%"rd /s /q "mnist_test_%BACKEND%"#执行转换 生成需要的文件"%TOOLS%/convert_mnist_data.exe" %DATA%/train-images.idx3-ubyte %DATA%/train-labels.idx1-ubyte mnist_train_%BACKEND% --backend=%BACKEND%"%TOOLS%/convert_mnist_data.exe" %DATA%/t10k-images.idx3-ubyte %DATA%/t10k-labels.idx1-ubyte mnist_test_%BACKEND% --backend=%BACKEND%echo "Done."pause

执行完上面的批处理后,将生成两个目录文件,一个测试集合一个训练集

2)训练与测试mnist

执行训练命令 Build\x64\Debug\caffe.exe train -solver examples\mnist\lenet_solver.prototxt
执行此命令有可能出错,例如我电脑不存在GPU 因此需要打开lenet_solver.prototxt文件 将定义的最后一行GPU改为CPU。再次编译
,大家就需要耐心等待啦,这个训练过程将会很漫长,我的电脑整整训练了将近2个半小时。如果有GPU的可能能快点。训练完成后,将会把训练好的模型存储在lenet_iter_10000.caffemodel文件中。
执行完后如图:这里写图片描述
可以看出caffe训练模型,准确率为99.11%。应该是一个非常好的结果啦。
执行测试命令 Build\x64\Debug\caffe.exe test -model examples\mnist\lenet_train_test.prototxt -weights examples\mnist\lenet_iter_10000.caffemodel
测试结果如图:这里写图片描述
可以看出测试识别率到达98.62%
mnist训练模型中,采用的网络结构详解可以参阅
http://www.cnblogs.com/xiaopanlyu/p/5793280.html

0 0
原创粉丝点击