【caffe-Windows】mnist實例編譯之model的使用-classification
標簽: 深度學習caffe 2016-08-16 11:24 1349人閱讀 收藏 舉報
本文章已收錄于:
分類: caffe(14) 作者同類文章X
版權聲明:歡迎大家一起交流,有錯誤謝謝指正~~~多句嘴,CSDN會在每一行代碼后面加兩個空格,復制博客代碼時請手動去掉,尤其是bat里面的代碼
目錄(?)[+]
第一步第二步第三步第四步第五步第六步第七步
仿照cifar10的模型使用,本文對mnist的訓練方式做了部分修改
【注】本文caffe安裝路徑為E:\CaffeDev-GPU\caffe-master。請自行參考并修改相關路徑(debug以及release參考你編譯caffe時候采用的模式)
第一步
按照前面的model生成方法的前兩步驟制作數據集,得到兩個文件夾。并拷貝到E:\CaffeDev-GPU\caffe-master\Build\x64\Release
train:鏈接:http://pan.baidu.com/s/1cJZNI2 密碼:ikz8
test:鏈接:http://pan.baidu.com/s/1gfuhmvx 密碼:7krq
第二步
計算均值文件:在E:\CaffeDev-GPU\caffe-master\Build\x64\Release目錄下新建bat文件mnist_mean.bat,內容如下
[html] view plaincopyprint?
compute_image_mean.exe?mnist_train_leveldb?mean.binaryproto??pause?? compute_image_mean.exe mnist_train_leveldb mean.binaryproto
pause得到mean.binaryproto
mean.binaryproto:鏈接:http://pan.baidu.com/s/1dFp19i5 密碼:xhux
第三步
將上面兩步的train和test數據集以及均值文件拷貝到E:\CaffeDev-GPU\caffe-master\examples\mnist文件夾下,方便后面的路徑書寫
修改此文件夾下的訓練方法lenet_train_test1.prototxt的前兩層,就是在原來的基礎上把均值文件加進去。同時注意lenet_solver.prototxt中的net是你修改以后的prototxt文件,我是把修改后的prototxt訓練文件命名為lenet_train_test1.prototxt了(加了一個1)
[html] view plaincopyprint?
name:?"LeNet"??layer?{????name:?"mnist"????type:?"Data"????top:?"data"????top:?"label"????include?{??????phase:?TRAIN????}????transform_param?{??????mean_file:?"examples/mnist/mean.binaryproto"??????scale:?0.00390625????}????data_param?{??????source:?"examples/mnist/mnist_train_leveldb"??????batch_size:?64??????backend:?LEVELDB????}??}??layer?{????name:?"mnist"????type:?"Data"????top:?"data"????top:?"label"????include?{??????phase:?TEST????}????transform_param?{???????mean_file:?"examples/mnist/mean.binaryproto"???????scale:?0.00390625????}????data_param?{??????source:?"examples/mnist/mnist_test_leveldb"??????batch_size:?100??????backend:?LEVELDB????}??}?? name: "LeNet"
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TRAIN}transform_param {mean_file: "examples/mnist/mean.binaryproto"scale: 0.00390625}data_param {source: "examples/mnist/mnist_train_leveldb"batch_size: 64backend: LEVELDB}
}
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TEST}transform_param {mean_file: "examples/mnist/mean.binaryproto"scale: 0.00390625}data_param {source: "examples/mnist/mnist_test_leveldb"batch_size: 100backend: LEVELDB}
}lenet_train_test1.prototxt:鏈接:http://pan.baidu.com/s/1skBN3Md 密碼:ixzt
lenet_solver1.prototxt:鏈接:http://pan.baidu.com/s/1kVxwQl5 密碼:3o5a
第四步
在E:\CaffeDev-GPU\caffe-master目錄下新建訓練bat文件train_minist.bat,內容如下:
[html] view plaincopyprint?
.\Build\x64\Release\caffe.exe?train?--solver=examples/mnist/lenet_solver1.prototxt??pause???? .\Build\x64\Release\caffe.exe train --solver=examples/mnist/lenet_solver1.prototxt
pause
此處注意一下CPU與GPU的訓練僅僅需要修改lenet_solver1.prototxt的最后一行即可
第五步
測試一下測試集的分批準確率,同樣在E:\CaffeDev-GPU\caffe-master下新建test_mnist.bat,內容如下
[html] view plaincopyprint?
.\Build\x64\Release\caffe.exe?test?--model=examples/mnist/lenet_train_test1.prototxt?-weights=examples/mnist/lenet_iter_10000.caffemodel?-gpu=0??pause?? .\Build\x64\Release\caffe.exe test --model=examples/mnist/lenet_train_test1.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel -gpu=0
pause運行之,得到如下結果:
第六步
這一步往后就比較實用了,先介紹如何制作手寫數字的單張測試樣本。兩種方法:①按照我前面的博客,從mnist數據集里面摘取里面的某張或者某些圖片;②用Windows的畫圖工具自己手寫一張(怎么打開畫圖工具就不說了吧)
為了方便直接調整寫的數字的大小,如果你這里不調整大小,在matlab里面有相關的resize函數,自己查詢調用方法,很簡單
然后,寫幾張,本人龍飛鳳舞地畫了幾張:鏈接:http://pan.baidu.com/s/1o79lL5S 密碼:umjl
可以發現,這個保存下來的是RGB圖像,三通道,然而我們的測試集和訓練集mnist都是灰度圖像,怎么辦,簡單,用matlab轉
[html] view plaincopyprint?
%存儲二值圖像??image=imread('009.png');??im=255-rgb2gray(image);??imshow(im)??imwrite(uint8(im),'./binarybmp/9.bmp');??? %存儲二值圖像
image=imread('009.png');
im=255-rgb2gray(image);
imshow(im)
imwrite(uint8(im),'./binarybmp/9.bmp'); 【注意】這里不要手動去save那個figure哦,不然圖像會比28*28大,一定要用imwrite,并且格式為bmp
轉換完畢的測試集:鏈接:http://pan.baidu.com/s/1o7NySMu 密碼:bead
第七步
把轉換好的二值圖像拷貝到E:\CaffeDev-GPU\caffe-master\examples\mnist\
在E:\CaffeDev-GPU\caffe-master\examples\mnist下建立標簽文件synset_words.txt:
[html] view plaincopyprint?
0??1??2??3??4??5??6??7??8??9?? 0
1
2
3
4
5
6
7
8
9
調用classification.exe去識別某張圖片,E:\CaffeDev-GPU\caffe-master目錄新建mnist_class.bat
[cpp] view plaincopyprint?
E:\CaffeDev-GPU\caffe-master\Build\x64\Release\classification.exe?E:\CaffeDev-GPU\caffe-master\examples\mnist\lenet.prototxt?E:\CaffeDev-GPU\caffe-master\examples\mnist\lenet_iter_10000.caffemodel?E:\CaffeDev-GPU\caffe-master\examples\mnist\mean.binaryproto?E:\CaffeDev-GPU\caffe-master\examples\mnist\synset_words.txt?E:\CaffeDev-GPU\caffe-master\examples\mnist\binarybmp\0.bmp??pause?? E:\CaffeDev-GPU\caffe-master\Build\x64\Release\classification.exe E:\CaffeDev-GPU\caffe-master\examples\mnist\lenet.prototxt E:\CaffeDev-GPU\caffe-master\examples\mnist\lenet_iter_10000.caffemodel E:\CaffeDev-GPU\caffe-master\examples\mnist\mean.binaryproto E:\CaffeDev-GPU\caffe-master\examples\mnist\synset_words.txt E:\CaffeDev-GPU\caffe-master\examples\mnist\binarybmp\0.bmp
pause
運行就會得到結果
【已解決】【筆者注】現在正在研究matlab的實現,在預處理部分卡住了,在模型中加入均值計算以及歸一化以后,這兩個操作有沒有先后順序,在matlab中先進行了減均值計算,發現數據分布有大于0和小于0的,如果直接除以255,肯定不可能歸一化到[0,1],此法測試效果很差,肯定錯了。如果采用mapminmax(A,0,1)歸一化到[0,1],結果也是錯的。如果有想法的同學請私密我一下,一起探討一下matlab的實現
參考預處理代碼詳解:http://blog.csdn.net/langb2014/article/details/51050213
Python的實現:http://www.dongcoder.com/detail-57212.html
總結
以上是生活随笔為你收集整理的【caffe-Windows】mnist实例编译之model的使用-classification的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。