Category Archives: Caffe

(20) CaffeでMNIST自動認識(その1)

(19) Caffeをインストール で Caffeがインストールできた。
今回は Caffe に付属しているサンプルを使って実際に Caffeを GPU上で動作させてみる。

なんと!
Caffeの実行サンプルには MNIST用トレーニング環境 が付属している。

このサンプルの使用手順は、以下のページに詳しく書かれている。
http://caffe.berkeleyvision.org/gathered/examples/mnist.html
20140813_04

(1) MNISTデータをダウンロード

まずはMNISTデータをダウンロードする。
Caffeを GITで取得&展開したディレクトリを CAFFE_ROOT とすれば、
$CAFFE_ROOT/data/mnist
にMNISTデータをダウンロードしておく。

この作業は get_mnist.sh に書かれているので、このスクリプトを実行すればよい。

$ cd $CAFFE_ROOT/data/mnist
$ ./get_mnist.sh

自分の作業環境の場合、先に (1) MNIST画像データをダウンロード で同データをダウンロード済みなので、今回この作業はいらない。

(2) トレーニング用データを作成

Caffeでは、MNISTデータを Caffeの入力データ形式に変換するプログラムを提供してくれている。
このプログラムの実行は create_mnist.sh に書かれている。

$ cd $CAFFE_ROOT/example/mnist
$ ./create_mnist.sh

このスクリプトを実行した結果、以下のように学習データ、テストデータの LevelDB が作られた。
LevelDBは googleが公開している key-value形式の汎用データストアプログラムだ。

$ ls -F | grep /
mnist-test-leveldb/
mnist-train-leveldb/

(3) トレーニング開始

チュートリアルのページには、超パラメーターの記述方法の説明が書かれている。
これらは後で熟読するとして、まずはトレーニングを実行してみたい。
トレーニング実行は train_lenet.sh に書かれている。

$ cd $CAFFE_ROOT/example/mnist
$ ./train_lenet.sh

このスクリプトの中身はこれ(↓)だけ。caffe実行プログラム caffe を起動している。

TOOLS=../../build/tools
$TOOLS/caffe train --solver=lenet_solver.prototxt

(4) トレーニング実行中

トレーニング実行中はトレースログが表示される。表示内容は以下の通り。

Iteration N, loss N batchの学習データの loss function value
Iteration N, lr N batchの learning rate
Test score #0 テストデータの正解率(0.0 ~ 1.0)
Test score #1 テストデータの loss function value

実際の表示内容はこちら(↓)

I0813 20:23:56.937985  4618 solver.cpp:165] Solving LeNet
I0813 20:23:56.937995  4618 solver.cpp:232] Iteration 0, Testing net (#0)
I0813 20:23:58.769482  4618 solver.cpp:270] Test score #0: 0.0427
I0813 20:23:58.769534  4618 solver.cpp:270] Test score #1: 2.30319
I0813 20:23:58.802779  4618 solver.cpp:195] Iteration 0, loss = 2.30285
I0813 20:23:58.802830  4618 solver.cpp:365] Iteration 0, lr = 0.01
I0813 20:24:02.135016  4618 solver.cpp:195] Iteration 100, loss = 0.339029
I0813 20:24:02.135049  4618 solver.cpp:365] Iteration 100, lr = 0.00992565
I0813 20:24:05.467381  4618 solver.cpp:195] Iteration 200, loss = 0.172438
I0813 20:24:05.467414  4618 solver.cpp:365] Iteration 200, lr = 0.00985258
I0813 20:24:08.799804  4618 solver.cpp:195] Iteration 300, loss = 0.197514
I0813 20:24:08.799839  4618 solver.cpp:365] Iteration 300, lr = 0.00978075
I0813 20:24:12.132412  4618 solver.cpp:195] Iteration 400, loss = 0.0895801
I0813 20:24:12.132447  4618 solver.cpp:365] Iteration 400, lr = 0.00971013
I0813 20:24:15.431949  4618 solver.cpp:232] Iteration 500, Testing net (#0)
I0813 20:24:17.205533  4618 solver.cpp:270] Test score #0: 0.9634
I0813 20:24:17.205569  4618 solver.cpp:270] Test score #1: 0.110554

(5) トレーニング終了

付属のMNISTサンプルの繰り返しトレーニング回数は 10,000[batch]だった。※10,000[epoch]ではない!
これは lenet_solver.prototxtmax_iter: 10000 で指定されている。
10,000[batch]終了時の最終結果は以下の通り。

テストデータの正解率は 99.1% と高い!

I0813 20:30:05.385545  4618 solver.cpp:287] Snapshotting to lenet_iter_10000
I0813 20:30:05.389729  4618 solver.cpp:294] Snapshotting solver state to lenet_iter_10000.solverstate
I0813 20:30:05.403728  4618 solver.cpp:213] Iteration 10000, loss = 0.00444134
I0813 20:30:05.403760  4618 solver.cpp:232] Iteration 10000, Testing net (#0)
I0813 20:30:07.157430  4618 solver.cpp:270] Test score #0: 0.9911
I0813 20:30:07.157462  4618 solver.cpp:270] Test score #1: 0.0283371
I0813 20:30:07.157470  4618 solver.cpp:218] Optimization Done.
I0813 20:30:07.157475  4618 caffe.cpp:102] Optimization Done.

Caffeでは繰り返し数をbatch数で指定する(EPOCH数では指定しない)

その理由は、こちらのページでCaffe開発者の方が言及されている。
https://github.com/BVLC/caffe/issues/59
20140824_01

付属のMNIST学習サンプルの場合、繰り返し数は lenet_solver.prototxtmax_iter: 1000010000[batch] に設定されている。1バッチの画像データ枚数は lenet_train_test.prototxtbatch_size: 64 で、TRAIN用は 64[images] に設定されている。

このことから…
MNISTの学習用データが 50,000枚 なので、1[epoch]は 50,000 ÷ 64781[batch] となる。
繰り返し回数指定が 10,000[batch] なので、10,000 ÷ 78112[epoch] となる。
※max_iter:10000は、10000epochではないのだ。

(19) Caffeをインストール

(18) GPU実装版の機械学習ツール に記したツールの中で、一番上に書かれている
Caffe なるツールを試してみたい。

公式サイトはここ(↓)
http://caffe.berkeleyvision.org/
20140813_02

インストール

Installation instructions のページに書かれている手順に従い、依存するライブラリ類からインストールする。
いつものように「あれがない、これがない」への対応が続く…
http://caffe.berkeleyvision.org/installation.html

確認

インストール完了後、make runtest でテストする。
718テストが成功しているので問題なしか?

20140813_03

次回は実際にトレーニングを動かしてみたい!