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