Help us understand the problem. What is going on with this article?

Caffeで手書き数字(MNIST)の認識学習をする

More than 3 years have passed since last update.

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: GPUsolver_mode: CPUに書き換えてください。これをやらないとバグります。

いよいよ用意したデータを元に学習を行います、これもまたスクリプトが用意されているので実行するだけです。

./examples/mnist/train_lenet.sh

そうするとlenet_train_test.prototxtlent_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の中身の値などを変えつつテスト繰り返し、それぞれのデータを見比べるのも楽しいので是非やってみてください。

学習で出力されたモデルの使用方法や学習経過をグラフで表示する方法などもじかんがあればまとめてみようと思います。

何か間違い、ご意見ありましたらご指摘お願いします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした