[[ノート>ノート/ノート]]

*Caffeのデモプログラムを試してみる (2014-12-24〜 ) [#n552aaf2]

Titanのインストール、Caffeのコンパイルが終わったので、元ページに載っているデモプログラムを試してみる。

**MNISTデータを試してみる。 [#dae09f22]

出所はBerkeleyのこのページ [[Training LeNet on MNIST with Caffe:http://caffe.berkeleyvision.org/gathered/examples/mnist.html]] にある通り。

 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.

***中身を見てみる [#wa4374a0]
起動用スクリプト 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: で参照されているネットの構造は <<<&ref(lenet_train_test.prototxt.txt,,.lenet_train_test.prototxt);>>> にある通り
-mnist DATA入力層で、上に(というよりLMDBのデータの中に)dataとlabelの2つのblobを持つ。~
data部分はLMDBバックエンドのmnist_train_lmdbから読み込み、batch_size=64とし、0.00390625倍(1/256)にスケール。TRAINフェーズの時のみ利用。
-mnist DATA入力層で、上にdataとlabelの2つのblobを持つ。~
data部分はLMDBバックエンドのmnist_test_lmdbから読み込み、batch_size=100とし、0.00390625倍(1/256)にスケール。フェーズの時のみ利用。
-conv1 CONVOLUTION層で、下のblobはdata、上はconv1。convolutionのパラメタは出力20個、カーネルサイズ=5、1ずつ移動、重みフィルタはxavier、バイアスフィルタは定数。
-pool1 POOLING層で、下のblobはconv1、上がpool1。poolingのパラメタはMAX、カーネルサイズ=2、2ずつ移動。
-conv2 CONVOLUTION層で、下のblobはpool1、上はconv2。convolutionのパラメタは出力50個、カーネルサイズ=5、1ずつ移動、重みフィルタはxavier、バイアスフィルタは定数。
-pool2 POOLING層で、下のblobはconv2、上はpool2。poolingのパラメタはMAX、カーネルサイズ=2、2ずつ移動。
-ip1 INTTER_PRODUCT層で、下のblobはpool2、上はip1。inner_productのパラメタは出力500個、重みフィルタはxavier、バイアスフィルタは定数。
-relu1 RELU層で、下のblobはip1、上もip1。
-ip2 INNER_PRODUCT層で、下のblobがip1、上はip2。inner_productのバラメタは出力10個、重みフィルタはxavier、バイアスフィルタは定数。
-accuracy ACCURACY層で、下のblobがip2とlabel、上のblobはaccuracy。TESTフェーズのみに挿入。
-loss SOFTMAX_LOSS層で、下のblobはip2とlabel、上のblobはloss。

となっている。図に書くと、

&ref(mnist1.jpg);

------
(2015-01-13) prototxtファイルからブロック図を生成するプログラムがあるのを発見。
下の図の作り方は、
 > python $(caffe_root)/python/draw_net.py $(caffe_root)/examples/mnist/lenet_train_test.prototxt output.png
でPNGファイル output.png が生成される。

| lenet_train_test.prototxt           | mnist_autoencoder.prototxt |
|&ref(lenet_train_test.png,,50%); |  &ref(mnist_autoencoder.png,,50%);|

ついでに、同じexamples/mnistディレクトリにあった mnist_autoencoder.prototxt をブロック図にしたものが右側。


-----

**CIFAR10 [#n67c4802]
-[[Alex’s CIFAR-10 tutorial, Caffe style:http://caffe.berkeleyvision.org/gathered/examples/cifar10.html]]

-[[KrizhevskyのCIFAR-10のページ:http://www.cs.toronto.edu/~kriz/cifar.html]]

-[[Cuda-convnetの(Cifer10の)Methodologyページ:https://code.google.com/p/cuda-convnet/wiki/Methodology]]


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.


| cifar10_quick.png | cifar10_full_train_test.png |
| &ref(cifar10_quick.png,,50%); | &ref(cifar10_full_train_test.png,,50%); |

**その他の参考サイト [#u5847793]
-[[Deep Learningで猫の品種識別:http://qiita.com/wellflat/items/0b6b859bb275fd4526ed]]

-[[大規模画像データセット:http://d.hatena.ne.jp/n_hidekey/20120115/1326613794]]

--------------------------------

[[YAMA/ノート/Caffeのデモプログラムを試してみる2 (2015-01-17) ]]
[[Caffeのデモプログラムを試してみる2>YAMA/ノート/Caffeのデモプログラムを試してみる2 (2016-1-17)]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS