mnist训练与测试自己手写数字

一、训练
1、从http://yann.lecun.com/exdb/mnist/下载的数据集
这需要进行数据结构转化,转化为lmdb格式。
这里写图片描述
解压到caffe->data->mnist文件夹下,右键git bash here,输入如下命令:

../../Build/x64/Release/convert_mnist_data train-images.idx3-ubyte train-labels.idx1-ubyte mnist_train_lmdb
../../Build/x64/Release/convert_mnist_data t10k-images.idx3-ubyte t10k-labels.idx1-ubyte mnist_test_lmdb

可能会出现如下错误:
这里写图片描述
这是因为在进行caffe编译的时候,没有编译convert_mnist_data项目。
这里写图片描述
所以在进行caffe编译的时候(对于初学者来说)尽量全部设置为启动项进行编译,以防按照博客步骤操作时出错,也不知道错在哪里。对于上面的命令只要路径写对,命令格式也对,都可以。运行后的正确结果为:
这里写图片描述
同样也可以直接下载转化好格式的文件,在下面修改的时候要数据格式保持一致。
2、然后把生成的两个文件复制到examples\mnist下,修改一下两个文件:
这里写图片描述
lenet_solver.prototxt:
这里写图片描述
lenet_train_test.prototxt:
这里写图片描述
3、在caffe根目录下git bash here输入:

caffe train -solver=examples/mnist/lenet_solver.prototxt -gpu 0

这里写图片描述
注意:经过测试发现,在修改lenet_solver.prototxt和Lenet_train_test.prototxt文件时,其具体的路径设置和你在哪个目录进行git bash here有关,如果你是在caffe的根目录进行操作的话,就把路径全部修改为examples/mnist/mnist_train_lmdb;如果是在examples/mnist下git bash here 则直接写所需文件的名字。

二、测试
1、进行测试需要均值,及进行训练数据的均值,可以通过conpute_image_mean里获取。在包含mnist_train_lmdb文件的目录下git bash here,输入如下命令:

compute_image_mean mnist_train_lmdb mean.binaryproto

这里写图片描述
会生成一个mean.binaryproto文件,然后把它放到examples/mnist文件下,并修改lenet_train_test.prototxt文件:
这里写图片描述
2、在caffe 根目录下git bash here输入如下命令:

caffe test -model=examples/mnist/lenet_train_test.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel -gpu 0

看到如下就成功了:
这里写图片描述
注意:上述测试结果不太好,但是每次测试结果可能都不一样,也和使用的数据集有关。

上述测试结果不好的原因:最近又跑了一遍mnist,发现在测试阶段,如果不采用均值计算,直接进行测试,效果会很好,准确率可以达到98%以上。首先采用的数据集本身只有黑白两色,图像特征属性很明确,如果采用均值计算,就像均值滤波一样,对数据会产生平滑模糊的效果,从而降低了数据集原本比较鲜明的特征属性,因此降低了测试的准确率。

三、测试自己的手写字符
1、通过画图工具,设置像素大小为28x28的图片,自己写上数字,然后通过matlab命令窗口转化为二值图片:

>> image=imread('C:\Users\admin\Desktop\num\2.png');
>> im=255-rgb2gray(image);
>> imwrite(uint8(im),'C:\Users\admin\Desktop\dig\2.bmp');
>> image=imread('C:\Users\admin\Desktop\num\3.png');
>> im=255-rgb2gray(image);
>> imwrite(uint8(im),'C:\Users\admin\Desktop\dig\3.bmp');
>> image=imread('C:\Users\admin\Desktop\num\6.png');
>> im=255-rgb2gray(image);
>> imwrite(uint8(im),'C:\Users\admin\Desktop\dig\6.bmp');

2、把生成二值图片的文件夹复制到examples\mnist下,然后新建txt文件输入10个阿拉伯数字:
这里写图片描述
在caffe 根目录下git bash here输入:

classification examples/mnist/lenet.prototxt examples/mnist/lenet_iter_10000.c          affemodel examples/mnist/mean.binaryproto examples/mnist/synset_worlds.txt examp          les/mnist/dig/3.bmp

这里写图片描述
不过有时候分类会出错。

你可能感兴趣的:(caffe)