Caffe下运行MNIST数据集

经过不断的调试,终于运行成功了MNIST数据集,对于Caffe是一小步,但对于我自己却是一大步。
本文的主要内容包含以下两个方面:一是预先规划的三种方法展示,二是自己在这个过程中遇到的问题,以及相关的解决方法。
一、三种方法
1 《21天》
6.1 该数据集包含60000个训练集和10000个测试集,每张图都已经进行尺寸归一化,数字居中处理,28*28,
6.1.1 下载MNIST数据集,他可以在caffe源码框架的data/mnist下用get_mnist.sh脚本下载
Cd data/mnist/ ./get_mnist.sh tree

可见MNIST原始数据为4个文件
(这里用到了脚本,很强大,可以一起执行很多句话,实现一个强大的组合的功能)
6.1.2 MNIST数据格式描述
6.1.3 转换格式
下载到的原始数据集为二进制文件,需要转换为LEVELDB或LMDB才能被caffe识别,我们已经编译好caffe,只需要在caffe根目录下执行以下脚本:
./examples/mnist/create_mnist.sh
浏览例程所在目录examples/mnist,发现生成了examples/mnist/mnist_train_lmdb/和test_lmdb/两个目录,每个目录cd下面有两个文件:data.mdb lock.mdb。这些即为生成的LMDB格式的MNIST训练集和测试集
通过查看这个shell,发现其调用了build/examples/mnist/convert_mnist_data.bin这个可执行程序,对应的源文件为examples/mnist/convert_mnist_data.cpp
6.2 LeNet-5模型描述
6.2.1 LeNet-5模型描述
数据源mnist负责从预处理得到的lmdb数据库中读取图像数据data和标签数据label,图形数据送入后续CNN结构中进行处理。CNN结构包含一组由卷积层conv(1,2)+下采样层pool(1,2)交替形成的特征层,以及两个全连接层ip1和ip2(类似于多层感知器结构)
LeNet的设计蕴涵了CNN的精髓,理解该模型对设计更大模型(ImageNet数据集上的AlexNet,GoogleNet,VGG等)有参考价值
6.2.2 训练超参数
启动 caffe训练过程
运行examples/mnist/train_lenet.sh脚本
6.2.3 训练日志
从上述输出结果可以看出最终训练的模型权值保存在examples/mnist/lenet_iter_10000.caffemodel文件中,训练状态保存在examples/mnist/lenet_iter_10000.solverstate文件中。这两个文件都是ProtoBuffer二进制格式文件
6.2.4 用训练好的模型对数据进行预测
利用训练好的LeNet-5模型权值文件,对测试数据集进行预测
./build/tools/caffe.bin test \
-model examples/mnist/lenet_train_test.prototxt \
-weights examples/mnist/lenet_iter_10000.caffemodel \
-iteration 100
第一行:表示只做预测(前向传播计算),不进行参数更新(后向传播计算)
第二行指定模型描述文本文件
第三行指定模型预先训练好的权值文件
第四行指定测试迭代次数
总结:深度学习的过程其实就是利用训练数据对模型进行训练,将数据中元层的大量信息通过机器学习算法不断收集到模型中,里用训练好的模型对现实世界中的相思数据进行特定处理
Build/tools/caffe.bin commands:train,test,device_query,time
2
http://blog.csdn.net/dujiajiyi_xue5211314/article/details/50267415
第一是下载数据集
Cd $CAFFE_ROOT(意思是进入caffe安装的根目录)
./data/mnist/get_mnist.sh
第二步是将数据转化为leveldb格式
./examples/mnist/create_mnist.sh 下载的原始数据是二进制转换成LDMB格式leveldb格式
第三步是训练数据
Sh sh /examples/mnist/train_lenet.sh
这里训练时可能出现问题,因为默认情况下是GPU执行的,所以需要修改一个地方在这个文件下 /examples/mnist/lenet_solver.prototxt
(#)solver mode:CPU or GPU
Solver_mode:CPU
然后就可执行成功,optimization done
3
http://caffe.berkeleyvision.org/gathered/examples/mnist.html
第一步准备数据集,可得到mnist_train_lmdb & mnist_test_lmdb
第二步Lenet:MNIST分类模型 介绍Lenet的基本构造
通过
CAFFE_ROOT/examples/mnist/lenet_train_test.prototxt可以查看层的具体内容
第三步定义MNIST网络,讲的很仔细,每一种类型的层是怎么得来的,分别包含Data layer, Convolution layer, Pooling layer, Fully Connected layer, ReLU layer, innerproduct layer, Loss layer
第四步定义MNIST solver
第五步 训练和测试模型 cd$CAFFE_ROOT ./examples/mnist/train_lenet.sh

结论
Caffe下运行MNIST数据集_第1张图片
正确率达到了98%

二、出现的问题
1 在使用./get_mnist.sh下载文件时,出现了两个问题,一是“./”没有加上,而直接执行,没有反应,二是没有使用sudo,结果导致不能在磁盘上写入文字
2 在使用 create_mnist.sh进行数据转换时,出现如下情况
http://blog.csdn.net/wishchin/article/details/44781641
这里讲到,直接到caffe-master的根目录执行,实际上新版的caffe,基本上都得从根目录上执行
3 在执行中,出现如下情况,原因是没有修改solver——mode,默认的是GPU但是这里只有CPU
Caffe下运行MNIST数据集_第2张图片
解决办法是需要修改一个地方在这个文件下 /examples/mnist/lenet_solver.prototxt
(#) solver mode:CPU or GPU
solver_mode:CPU
4 Caffe下运行MNIST数据集_第3张图片
error parsing text-format caffe.SolverParameter
找到原因了,原因是我的vi文字编辑器用的不好,在修改solver_mode的时候,额外添加了许多别的字母,A,B,C,D什么的,将之进行删除,就成功了
就感觉不正常,本来还以为是计算机的多核呢?仔细阅读之后,发现这不就是我之前定义的solver_mode吗!从这里也说明仔细阅读日志是很重要的,里面有解决问题的线索。
Caffe下运行MNIST数据集_第4张图片
5 运行test程序,出现如下情况
Caffe下运行MNIST数据集_第5张图片
使用逐条输入方法后,运行了,但是又出现下列问题
Caffe下运行MNIST数据集_第6张图片
check failed: mdb_status==0 (13 vs. 0) Permission denied
解决办法是加上sudo
http://bbs.csdn.net/topics/391931961
这个上面说检查命令中的文件的读取权限,比如你的数据文件image_test_lmdb需要root身份才能读取,那么在编写测试或训练命令时就应该加上sudo。根据教程来的时候,很多文件都是需要root身份才可读取,所以在执行与该文件有关的命令时,也都应该以root身份执行
Caffe下运行MNIST数据集_第7张图片

你可能感兴趣的:(caffe)