Caffeとは
最近話題のDeep Learningのオープンソースなフレームワークです。
公式ホームページはこちら、C++、PythonやMATLABで使えるので得意な方を選んで使えます。
ここから画像分類のデモが見られるので、気になる方は試してみてください。
Caffeの導入方法はこの記事にまとめておいたのでもしよろしければ参考にしてください。
MNIST(Mixed National Institute of Standards and Technology)とは
MNISTとは28x28pxの60000枚の学習サンプル、10000枚のテストサンプルからなる手書き数字画像データベースです。ニューラルネットワークのベンチマーク的な立場で機械学習分野やDeepLearning分野で広く使われています。
CaffeにはMNISTの学習を簡単に行えるスクリプトが用意されているので試してみました!
CaffeでMNISTを学習する
まずはCaffeのルートディレクトリに移動してください。移動後にCaffeにあらかじめ用意されているスクリプトを実行しMNISTデータ一式をダウンロードします、なおこの実行にはwgetとgunzipが必要になるので入れてない人はhomebrewとかで入れておいてください。
cd /path/to/caffe
./data/mnist/get_mnist.sh
Caffeは画像学習を行う際LevelDBかLMDB形式で読み込ませる必要があるので前述でダウンロードしてきたデータを次のスクリプトでLMDBに変換します。
./examples/mnist/create_mnist.sh
そうすると./example/mnist/mnist_train_lmdb
と./example/mnist/mnist_test_lmdb
が作成されたと思います。trainは学習に使用され、testの方は学習の評価に使用されます。
学習を行う前にCaffeをCPU_ONLYで動かしてる人は、./examples/mnist/lenet_solver.prototxt
内のsolver_mode: GPU
をsolver_mode: CPU
に書き換えてください。これをやらないとバグります。
いよいよ用意したデータを元に学習を行います、これもまたスクリプトが用意されているので実行するだけです。
./examples/mnist/train_lenet.sh
そうするとlenet_train_test.prototxt
とlent_solver.prototxt
が読み込まれレイヤーネットワークの構築、学習が開始されます。
学習中にlossとaccuracyというものが表示されていると思います。lossは予測と正解の一致が多くなると小さくなる値、accuracyは正解率をそれぞれ意味します。なのでこれらの値の推移を見ていると学習が進んでいる様子が分かると思います。
I0704 solver.cpp:343] Test net output #0: accuracy = 0.0912
I0704 solver.cpp:343] Test net output #1: loss = 2.44682 (* 1 = 2.44682 loss)
学習の最後にテストが走りネットワークの最終評価が表示され、学習済みモデルとして.examples/mnist/lenet_iter_10000.caffemodel
が出力されます。この学習済みモデルを読み込むことでいつでもMNISTの認識学習を行った後の状態のネットワークを再現できるので実際のプロダクトなどに学習済みのネットワークを組み込むことができます。
MNISTの認識学習はここまでです。今回はもともと用意されたprototxtを読み込んで学習を行ったのでパラメータのチューニングをする意味はあまりないと思いますが、lenet_solver.prototxt
の中身の値などを変えつつテスト繰り返し、それぞれのデータを見比べるのも楽しいので是非やってみてください。
学習で出力されたモデルの使用方法や学習経過をグラフで表示する方法などもじかんがあればまとめてみようと思います。
何か間違い、ご意見ありましたらご指摘お願いします。