從一到二:利用mnist訓練集生成的caffemodel對mnist測試集與本身手寫的數字進行測試html
經過從零到一的教程,咱們已經獲得了經過mnist訓練集生成的caffemodel,主要包含下面四個文件:python
接下來就能夠利用模型進行測試了。關於測試方法按照上篇教程仍是選擇bat文件,固然python、matlab更爲方便,好比能夠迅速把識別錯誤的圖片顯示出來。git
1、均值文件mean.binaryproto程序員
在進行分類以前首先須要產生全部圖片的平均值圖片,真正分類時的每一個圖片都會先減去這張平均值圖片再進行分類。這樣的處理方式可以提高分類的準確率。github
產生均值文件的方法是利用解決方案中的compute_image_mean.exe,位於目錄\caffe-windows\Build\x64\Release下。回到caffe-windows根目錄下建立一個mnist_mean.txt,寫入以下內容:windows
個人是生成lmdb格式。 網絡
將後綴名改成bat後雙擊運行(其實寫了那麼多bat文件也應該有體會了,只要指定的路徑正確就行,不必定非要放在caffe-windows根目錄下)。正確運行的話會在根目錄下產生一個mean.binaryproto,也就是咱們所須要的均值文件。接着爲了使用均值文件須要稍微修改下層的定義。因此打開\examples\mnist\lenet_train_test.prototxt,作以下修改:學習
到此爲止,均值文件的預處理部分處理完畢,下面就能夠進行測試了。測試
2、利用mnist測試集進行測試ui
這部分比較簡單,由於以前生成的Caffe.exe就能夠直接用來進行測試。一樣地在caffe-windows目錄下新建mnist_test.txt,並寫入以下內容(其中的間斷處都爲一個空格)。
意思也顯而易見,首先指定爲測試模式,隨後指定模型和訓練出來的參數。
將後綴名改成bat後雙擊運行,結果以下所示:
左側的內容依舊是GLOG的記錄日誌,右側中的Batch須要和網絡參數初始中的batch_size一塊兒理解。每一個Batch中包含了batch_size張測試圖片,因此每一個Batch的準確率是對這batch_size張測試圖片總體而言的。而不是像我最初同樣先入爲主地覺得準確率應該是對每張測試圖片而言,故只有0和1兩種狀況。
這邊我的也有個小問題,Batch之因此爲0-49共50個是由caffe.cpp中一個叫作FLAGS_iterations的變量指定的,可是找來找去實在沒法肯定這個變量是不是由網絡參數肯定的,以後再好好看一下代碼。
這個準確率不能說特別好,由於我有空也嘗試過Tensorflow,Tensorflow官方文檔中的一個多層卷積網絡對mnist測試集的準確率爲99.2%左右。不過到此爲止咱們已經完成了mnist測試集在caffe上的運行和測試。
3、利用本身的手寫數字進行測試
主要參考了http://blog.csdn.net/zb1165048017/article/details/52217772這篇文章,不過仍是有些細節須要更改。
(1)首先能夠按照上面網址教程中的第六和第七步在\examples\mnist目錄下生成手寫的一個28*28像素數字的bmp文件和一個標籤文件label.txt。好比我手寫的數字以下圖所示:
這裏須要注意的是上述教程中的matlab代碼最後一句須要更改。例如我已經將matlab的工做目錄設爲\caffe-windows\examples\mnist,就能夠直接輸入(test1爲個人手寫數字文件名):
(2)以後就能夠調用以前生成的classification.exe進行分類。一樣的在caffe-windows目錄下新建test_personaldig.txt並寫入以下內容:
中間的三行實際上是每一個加一個空格後跟在examples\mnist\lenet.prototxt的後面,這裏爲了顯示地更加清楚而進行了換行。更改後綴爲bat後就能夠雙擊運行,會出現相似下面的內容:
可見分類結果正確。讓咱們再來測試一個下圖寫得一個比較飄逸的5。
分類結果仍是正確的。
4、後記
到此爲止咱們已經完成了利用mnist測試集對生成的模型進行準確率測試,併成功對本身手寫的數字進行了識別,總之效果還不差。然而至此教程甚至根本沒有說起過卷積神經網絡,可見caffe的確可讓一個徹底不懂卷積神經網絡原理的人經過不斷手動調整參數完成學習,實現分類等目標,甚至還能取得很是不錯的效果。就像程序員和數學的關係同樣,知曉了卷積神經網絡的詳細原理對咱們使用caffe只有好處沒有壞處,而且要真正作到看懂caffe的每一個模塊必須瞭解卷積神經網絡。博主本身也正在深刻學習卷積神經網絡,這裏推薦一個很是好的入門資料CS231n Convolutional Neural Networks for Visual Recognition
http://cs231n.github.io/convolutional-networks/
上面網址中的教程對卷積神經網絡的基礎知識講述得很是透徹清楚。但若是想繼續瞭解其中的數學推導的話,建議再看下面這篇文章:
Notes on Convolutional Neural Networks, Jake Bouvrie