Titanのインストール、Caffeのコンパイルが終わったので、元ページに載っているデモプログラムを試してみる。
出所はBerkeleyのこのページ Training LeNet on MNIST with Caffe にある通り。
cd $CAFFE_ROOT ./data/mnist/get_mnist.sh データを持ってくる ./examples/mnist/create_mnist.sh データの準備 ./examples/mnist/train_lenet.sh 学習させる
結果はこんな風になった。
I1219 08:37:12.889474 32546 solver.cpp:247] Iteration 10000, Testing net (#0) I1219 08:37:13.882843 32546 solver.cpp:298] Test net output #0: accuracy = 0.9912 I1219 08:37:13.882863 32546 solver.cpp:298] Test net output #1: loss = 0.0281126 (* 1 = 0.0281126 loss) I1219 08:37:13.882869 32546 solver.cpp:233] Optimization Done. I1219 08:37:13.882874 32546 caffe.cpp:121] Optimization Done.
起動用スクリプト train_lenet.sh の内容は
#!/usr/bin/env sh ./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt
要するに、caffeプログラムを、trainモードで、かつsolverとして lenet_solver.prototxt ファイルの内容を参照して、起動している。
prototxtファイルのパラメタの書き方などは、ファイル caffe.prototxt にある通りだが、 それをざっと整理してみたのが ノート/Caffeのモジュール記述抜粋(caffe.prototxt) である。
上記shファイルで参照されている lenet_solver.prototxt の内容は <<<lenet_solver.prototxt>>>
net: "examples/mnist/lenet_train_test.prototxt" test_iter: 100 test時に(batch size = 100 を)100回繰り返す(全体で10000データ) test_interval: 500 testは学習500回ごと間隔で行う base_lr: 0.01 ベースの学習レートは0.01に設定 momentum: 0.9 モーメンタムは0.9 weight_decay: 0.0005 重みの遅延は0.0005 lr_policy: "inv" 学習レートのポリシーはinvにする gamma: 0.0001 gammaは0.0001 power: 0.75 powerは0.75 display: 100 結果表示は100繰り返しごと max_iter: 10000 最大の繰り返し数は10000回まで snapshot: 5000 途中のスナップショットは5000回おき snapshot_prefix: "examples/mnist/lenet" スナップショットのファイルをここへ置く solver_mode: GPU solverはGPUを使う
この1行目の net: で参照されているネットの構造は <<<.lenet_train_test.prototxt>>> にある通り
となっている。図に書くと、
(2015-01-13) prototxtファイルからブロック図を生成するプログラムがあるのを発見。 下の図の作り方は、
> python $(caffe_root)/python/draw_net.py $(caffe_root)/examples/mnist/lenet_train_test.prototxt output.png
でPNGファイル output.png が生成される。
ついでに、同じexamples/mnistディレクトリにあった mnist_autoencoder.prototxt をブロック図にしたものが右側。
quickの最後の方のコンソール
I1226 10:30:28.663301 13513 solver.cpp:247] Iteration 5000, Testing net (#0) I1226 10:30:30.767330 13513 solver.cpp:298] Test net output #0: accuracy = 0.7589 I1226 10:30:30.767351 13513 solver.cpp:298] Test net output #1: loss = 0.724786 (* 1 = 0.724786 loss) I1226 10:30:30.767360 13513 solver.cpp:233] Optimization Done. I1226 10:30:30.767366 13513 caffe.cpp:121] Optimization Done.
fullの最後の方のコンソール
I1226 11:43:40.781108 24261 solver.cpp:247] Iteration 70000, Testing net (#0) I1226 11:43:42.959712 24261 solver.cpp:298] Test net output #0: accuracy = 0.8144 I1226 11:43:42.959734 24261 solver.cpp:298] Test net output #1: loss = 0.533652 (* 1 = 0.533652 loss) I1226 11:43:42.959743 24261 solver.cpp:233] Optimization Done. I1226 11:43:42.959749 24261 caffe.cpp:121] Optimization Done.