手寫體數字識別例子

  mnist是一個大型的手寫體數字數據庫,廣泛應用於機器學習領域的訓練和測試。mnist對每張圖都已經進行尺寸歸一化,固定尺寸28像素x28像素。
  下面開始手寫體的簡單例子測試caffe的安裝情況。(注:未編譯安裝caffe請移步到我的博客:Ubuntu14.04下深度學習平臺caffe的安裝 文章)

1.下載mnist數據集

  mnist部分數據集可以在caffe根目錄下data/mnist下用get_mnist.sh腳本下載。

$ cd data/mnist

$ ./get_mnist.sh

  下載好後可以看到4個數據文件。
這裏寫圖片描述

2.轉換格式

  下載到的原始數據集未二進制文件,文件格式可到mnist網站進行查詢。caffe需要識別LEVELDB或LMDB,我們只需要在caffe根目錄下執行

$ ./examples/mnist/create_mnist.sh

  瀏覽examples/mnist目錄,發現生產了examples/mnist/mnist_train_lmdb/和examples/mnist/mnist_test_lmdb/兩個目錄, 每個目錄下都有兩個兩個文件:data.mdb和lock.mdb
這裏寫圖片描述
  mnist_train_lmdb是訓練集,mnist_test_lmdb是測試集。
  讓我們查看腳本的實現:

#!/usr/bin/env sh
# This script converts the mnist data into lmdb/leveldb format,
# depending on the value assigned to $BACKEND.
set -e

EXAMPLE=examples/mnist
DATA=data/mnist
BUILD=build/examples/mnist

BACKEND="lmdb"

echo "Creating ${BACKEND}..."

rm -rf $EXAMPLE/mnist_train_${BACKEND}
rm -rf $EXAMPLE/mnist_test_${BACKEND}

$BUILD/convert_mnist_data.bin $DATA/train-images-idx3-ubyte $DATA/train-labels-idx1-ubyte $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND}
$BUILD/convert_mnist_data.bin $DATA/t10k-images-idx3-ubyte $DATA/t10k-labels-idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND}

echo "Done."

上面腳本調用了bin/convert_mnist_data.bin這個可執行程序,對應源文件爲examples/mnist/convert_mnist_data.cpp,有興趣可自行查閱其實現。

3.訓練超參數

  使用經典的LeNet-5模型進行訓練,模型的描述文件爲examples/mnist/lenet_train_val.prototext。
  運行example/mnist/train_lenet.sh腳本。先用vi打開改腳本,內容如下

#!/usr/bin/env sh
set -e
./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt

  可見,調用了我們編譯好的build/tools/caffe可執行文件,參數–solver=examples/mnist/lenet_solver.prototxt指定了訓練超參數(Hyper-Parameter)文件。
  我們打開examples/mnist/lenet_solver.prototxt文件,其中

net: "examples/mnist/lenet_train_test.prototext"

一行定義了訓練網絡的描述文件。最後一行

solver_mode: CPU

指定了訓練使用的模式,如果已經配置好CUDA,可以改爲GPU。運行此腳本,等待訓練完畢。(使用GPU模式在本人機器GT740M+i5 3230M上耗時5分鐘,使用CPU模式大概爲15-20分鐘)

這裏寫圖片描述
從圖中可以看出,最後的訓練分類準確率爲99.08%,最終訓練的模型權值保存早examples/mnist/lenet_iter_10000.caffemodel文件中訓練狀態則保存在examples/mnist/lenet_iter_10000.solverstate文件中。這兩個文件都是ProtoBuffer二進制格式文件。

4.預測

  利用訓練好的模型權值文件examples/mnist/lenet_iter_10000.caffemodel可以對測試數據集進行預測。運行如下命令

$ ./build/tools/caffe test -model examples/mnist/lenet_train_test.prototext -weights examples/mnist/lenet_iter_10000.caffemodel -itearations 100

  命令的參數解釋:

  • ./build/tools/caffe test 表示只做預測(前向傳播計算),不進行參數更新(反向傳播計算)
  • -model examples/mnist/lenet_train_test.prototext 指定模型描述文本文件
  • -weights examples/mnist/lenet_iter_10000.caffemodel 指定預先訓練好的權值文件
  • -itearations 100 指定迭代次數

執行命令後如圖所示,得到預測結果。
這裏寫圖片描述


  有興趣可將自己手寫體數字圖片(縮放到28x28)送入訓練得到的LeNet模型進行預測。

發佈了29 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章