2014年12月15日月曜日

CaffeでMNISTの学習を試してみた。

ここに記載された手順に従い、CaffeでMNISTの学習をさせてみた。


1 データの取得と変換

MNISTのページはここ
手書きデータは、20x20の8bitグレースケールの画像を28x28の中心にanti-aliasingを行い変換したものとのこと

cd $CAFFE_ROOT
スクリプト
data/mnist/get_mnist.sh
の実行により data/mnist/ に、データがダウンロードされる

-rw-r--r-- 1 root root  7840016 Jul 21  2000 t10k-images-idx3-ubyte
-rw-r--r-- 1 root root    10008 Jul 21  2000 t10k-labels-idx1-ubyte
-rw-r--r-- 1 root root 47040016 Jul 21  2000 train-images-idx3-ubyte
-rw-r--r-- 1 root root    60008 Jul 21  2000 train-labels-idx1-ubyte

lmdbへのデータ登録
スクリプト
examples/mnist/create_mnist.sh
の実行により examples/mnist に、2つのlmdbデータができている

drwxr--r--  2 root root  4096 Dec  3 02:08 mnist_test_lmdb
drwxr--r--  2 root root  4096 Dec  3 02:08 mnist_train_lmdb

3 ソルバー定義をCPUに変更に変更
examples/mnist/lenet_solver.prototxt の最後の1行を

# solver mode: CPU or GPU
solver_mode: CPU
に変更

3 学習開始
スクリプト
examples/mnist/train_lenet.sh
を実行する。

train_lenet.sh のスクリプト中身は、
./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt
である。

tools/caffeは、シンボリックリンクであり実体は、
lrwxrwxrwx 1 root root 55 Dec  7 06:39 ./build/tools/caffe -> /home/caffe/caffe-master/.build_release/tools/caffe.bin
である。

テストは、
lenet_solver.prototxtの
# The maximum number of iterations
max_iter: 10000
に記載された回数行われる。

最後のメッセージ

Snapshotting to examples/mnist/lenet_iter_10000.caffemodel
Snapshotting solver state to examples/mnist/lenet_iter_10000.solverstate
Iteration 10000, loss = 0.00377495
Iteration 10000, Testing net (#0)
Test net output #0: accuracy = 0.9907
Test net output #1: loss = 0.0270027 (* 1 = 0.0270027 loss)
Optimization Done.
Optimization Done.

精度は、0.9907となった。
CPUの場合Caffeの計算は、シングルコアで行われており、使用したマシンでは、計算時間に約23分使用した。

生成物
examples/mnist/に4個のファイルができている。

-rw-r--r--  1 root root 1724895 Dec  7 08:26 lenet_iter_10000.caffemodel
-rw-r--r--  1 root root 1724485 Dec  7 08:26 lenet_iter_10000.solverstate
-rw-r--r--  1 root root 1724895 Dec  7 08:14 lenet_iter_5000.caffemodel
-rw-r--r--  1 root root 1724484 Dec  7 08:14 lenet_iter_5000.solverstate

手書き文字の認識には、
MODEL_FILEには、lenet_iter_10000.caffemodelを使用する。

以上

0 件のコメント:

コメントを投稿