caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)
準(zhǔn)備數(shù)據(jù)集
http://yann.lecun.com/exdb/mnist/提供了訓(xùn)練集與測(cè)試集數(shù)據(jù)的下載。
但是caffe并不是直接處理這些數(shù)據(jù),而是要轉(zhuǎn)換成lmdb或leveldb格式進(jìn)行讀取。如何轉(zhuǎn)換可以再去查閱相關(guān)資料,為簡(jiǎn)化步驟,直接給出下載地址:
鏈接:http://pan.baidu.com/s/1nv3a5LJ 密碼:jvlt
數(shù)據(jù)集格式是leveldb。
進(jìn)行訓(xùn)練
在正式開始訓(xùn)練之前,要先配置一些參數(shù)。
進(jìn)入到配置caffe環(huán)境時(shí)編譯caffe工程的目錄。
1、打開目錄下的 \examples\mnist 下的lenet_solver.prototxt。
更改最后的solver_mode,是CPU版本的填CPU,GPU版本的填GPU。
最大迭代次數(shù)為10000次,訓(xùn)練進(jìn)行到10000次停止。
# snapshot intermediate results snapshot: 5000 snapshot_prefix: "examples/mnist/lenet"snapshot為中間過程文件,后面輸出文件中包含了中間過程生成的caffelmodel文件。
2、接著打開 \examples\mnist 下的lenet_train_test.prototxt。
source指定到訓(xùn)練集存放的目錄;
backend選擇LEVELDB;
source指定到測(cè)試集存放的目錄;
backend選擇LEVELDB;
mnist的數(shù)據(jù)集存放目錄在:\examples\mnist
3、接下來(lái)可以開始訓(xùn)練了。
在編譯caffe的工程根目錄下編寫bat腳本:
Build\x64\Release\caffe.exe:指定到caffe.exe所在目錄,caffe.exe就是之前caffe工程編譯后的可執(zhí)行文件。
train:進(jìn)行訓(xùn)練。
--solver=examples/mnist/lenet_solver.prototxt:lenet_solver.prototxt就是之前更改的配置文件。
編寫完成后,保存,雙擊運(yùn)行bat腳本。
caffe開始訓(xùn)練,首先會(huì)打印一些配置信息:
我的電腦裝的是GPU版本。
訓(xùn)練幾分鐘后結(jié)束。
CPU版本會(huì)慢一些,可能10多分鐘,根據(jù)配置不同速度也不一樣。
4、到\examples\mnist目錄下查看生成的caffemodel文件。
文件后的參數(shù)指迭代次數(shù)。
迭代到5000次時(shí)根據(jù)當(dāng)前的參數(shù)生成一個(gè)caffemodel文件,就是snapshot指定的參數(shù)。
10000次時(shí)最大迭代次數(shù),即輸出結(jié)果。
所以測(cè)試時(shí),調(diào)用的是lenet_iter_10000.caffemodel文件。
測(cè)試結(jié)果
1、測(cè)試之前,還需要產(chǎn)生以下所有圖片的均值文件。計(jì)算時(shí),會(huì)將每幅圖片減去這個(gè)均值,使用差進(jìn)行分類??梢杂懈玫姆诸愋Ч?。
產(chǎn)生均值mean文件需要調(diào)用compute_image_mean.exe。
一般會(huì)在\Build\x64\Release下生成,如果沒有,可以打開caffe的工程,選中對(duì)應(yīng)的工程進(jìn)行編譯,就會(huì)產(chǎn)生compute_image_mean.exe。
在根目錄編寫bat腳本,調(diào)用compute_image_mean.exe生成均值文件。
Build\x64\Release\compute_image_mean.exe examples\mnist\mnist_train_leveldb mean.binaryproto --backend=leveldb pause
生成的mean文件。
2、生成了mean文件后,可以使用caffe.exe調(diào)用訓(xùn)練好的模型識(shí)別手寫數(shù)字了。
由于之前生成了mean文件,所以還要在lenet_train_test.prototxt中加上它。
在根目錄編寫bat腳本,調(diào)用caffe.exe識(shí)別手寫數(shù)字。
Build\x64\Release\caffe.exe test --model=examples\mnist\lenet_train_test.prototxt -weights=examples\mnist\lenet_iter_10000.caffemodel -gpu=0 pause--model=examples\mnist\lenet_train_test.prototxt:指定配置,之前添加了mean文件進(jìn)去。
-weights=examples\mnist\lenet_iter_10000.caffemodel:指定訓(xùn)練好的模型。
-gpu=0:加上表示使用gpu,如果不是gpu版的去掉這個(gè)就可以了。
保存bat腳本,雙擊運(yùn)行。
看accuracy知道,準(zhǔn)確率不是很高。
3、自己手寫數(shù)字來(lái)進(jìn)行識(shí)別,可以使用畫圖工具繪制。
使用matlab編寫簡(jiǎn)單程序?qū)⑷ǖ赖膱D像轉(zhuǎn)換成二值圖像。
相關(guān)步驟可以參考下面這個(gè)博客:
http://blog.csdn.net/zb1165048017/article/details/52217772
不做贅述。
我們得到的圖片放到一個(gè)方便找到的目錄吧,我就直接放到\examples\mnist目錄下了。
編寫bat腳本文件,調(diào)用classification.exe,沒有的自己在編譯caffe的visual studio項(xiàng)目里找到對(duì)應(yīng)工程編譯下就有了。
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\0.bmp Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\1.bmp Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\2.bmp Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\3.bmp Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\4.bmp Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\5.bmp Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\6.bmp Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\7.bmp Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\8.bmp Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\9.bmp pause識(shí)別效果不是很好,可能訓(xùn)練的迭代次數(shù)還是少了,有待改進(jìn)。
總結(jié)
以上是生活随笔為你收集整理的caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: caffe学习(一):开发环境搭建,编译
- 下一篇: java信息管理系统总结_java实现科