1. 程式人生 > >微軟caffe+mnist訓練及預測

微軟caffe+mnist訓練及預測

                                               訓練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程式如下:


結果如下: