微软caffe+mnist训练及预测

                                               训练mnist数据集

第一步:去官网下载mnist数据集http://yann.lecun.com/exdb/mnist/

下载解压后放入caffe-master\data\mnist

第二步:在caffe-master根目录下,创建create-mnist.bat,写入如下脚本

.\Build\x64\Release\convert_mnist_data.exe.\data\mnist\train-images.idx3-ubyte .\data\mnist\train-labels.idx1-ubyte.\examples\mnist\mnist_train_lmdb  

echo.  

.\Build\x64\Release\convert_mnist_data.exe.\data\mnist\t10k-images.idx3-ubyte  .\data\mnist\t10k-labels.idx1-ubyte.\examples\mnist\mnist_test_lmdb 

Pause

保存后双击该脚本运行就可以在caffe\examples\mnist下生成相应的lmbd数据文件

第三步:在caffe-master\examples\mnist\lenet_solver.prototxt,将最后一行改为solver_mode:CPU

不修改就会报错:check failure stack trace

修改caffe-master\examples\mnist\lenet_train_test.prototxt中的source 把文件位置对应起来

第四步:生成均值文件mean.binaryproto

产生均值文件的方法是利用解决方案中的compute_image_mean.exe,位于目录\caffe-windows\Build\x64\Release下。回到caffe-windows根目录下创建一个mnist_mean.txt,写入如下内容:

Build\x64\Release\compute_image_mean.exeexamples\mnist\mnist_train_lmdb mean.binaryproto --backend=lmdb

pause

   将后缀名改为bat后双击运行。正确运行的话会在根目录下产生一个mean.binaryproto,也就是我们所需要的均值文件。接着为了使用均值文件需要稍微修改下层的定义。所以打开\examples\mnist\lenet_train_test.prototxt,做如下修改:

 

第五步:在caffe-master根目录下 新建train_mnist.bat,输入如下脚本

Build\x64\Release\caffe.exe  train--solver=examples/mnist/lenet_solver.prototxt 

pause 

保存双击运行,开始训练


或者在cmd里面到caffe-master目录下  输入Build\x64\Release\caffe.exe  train--solver=examples/mnist/lenet_solver.prototxt,同样可以训练


利用HDF5文件训练MNIst

首先、利用matlabmnsit转换为HDF5文件,matlab程序如下

clc

close all

clear all

%%

 

%addpath mnistHelper;

%addpath datasets;

 

% train-images.idx3-ubyte/ train-labels.idx1-ubyte

images = loadMNISTImages('train-images.idx3-ubyte');

labels = loadMNISTLabels('train-labels.idx1-ubyte');

 

% reshape images to 4-D:[rows,col,channel,numbers]

trainData=reshape(images,[28 281 size(images,2)]);

 

% permute to[cols,rows,channel,numbers]

trainData=permute(trainData,[21 3 4]);

 

% permute lables to[labels, number of labels ]

trainLabels=permute(labels,[2,1]);

h5create('train.h5','/data',size(trainData),'Datatype','double');

h5create('train.h5','/label',size(trainLabels),'Datatype','double');

 

h5write('train.h5','/data',trainData);

h5write('train.h5','/label',trainLabels);

 

%%

% test images

images = loadMNISTImages('t10k-images.idx3-ubyte');

labels = loadMNISTLabels('t10k-labels.idx1-ubyte');

 

% reshape images to 4-D:[rows,col,channel,numbers]

testData=reshape(images,[28 281 size(images,2)]);

 

% permute to[cols,rows,channel,numbers]

testData=permute(testData,[2 13 4]);

 

% permute lables to[labels, number of labels ]

testLabels=permute(labels,[2,1]);

h5create('test.h5','/data',size(testData),'Datatype','double');

h5create('test.h5','/label',size(testLabels),'Datatype','double');

 

h5write('test.h5','/data',testData);

h5write('test.h5','/label',testLabels);

生成后可以使用label=h5read('train.h5','/label');来读取数据

注意:matlab的数组顺序是[rows,col,channel,numbers][labels, number of labels ],而Python中的数据正好相反。

然后,给出train.h5test.h5的绝对路径

接着,修改lenet_train_test_hdf5.prototxt

记住HDF5文件不能做transformer操作,需要在写入的时候做好均值,归一化等处理


最后训练

                                                                                                                预测过程

第一步:利用mnist测试集进行测试

新建mnist_test.dat

写入Build\x64\Release\caffe.exe test--model=examples\mnist\lenet_train_test.prototxt--weights=examples\mnist\lenet_iter_10000.caffemodel -iterations 100

Pause

Iterations 为测试迭代次数。参与测试的样例数目为(iterations*batch_size=100*100=10000)包含了整个测试集

结果如下:

注意:训练的时候就需要做去均值处理,否则后面的测试分类结果就不对了。测试的去均值和训练时候的训练集的去均值保持一致。

第二步:自己做手写数据

自己在画图软件上手写一个数字


保存下来的是RGB图像,三通道。利用matlab转换成灰度图


将得到的灰度图放入examples\mnist 中

第三步:在examples\mnist下建立标签文件synset_words.txt


第四步:新建mnsit_test.dat

输入:

Build\x64\Release\classification.exeexamples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodelmean.binaryproto examples\mnist\synset_words.txt examples\mnist\3.bmp

Pause

保存运行,结果如下:

 

利用caffe的python接口进行预测,利用训练好的mnist模型进行预测

网络文件lenet.prototxt和与预训练模型文件lenet_iter_10000.caffemodel及测试图片与上面一样。

Python程序如下:


结果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值