训练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
首先、利用matlab将mnsit转换为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.h5和test.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程序如下:
结果如下: