微軟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
首先、利用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程式如下:
結果如下: