ここに記載された手順に従い、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
2 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 件のコメント:
コメントを投稿