ひょんなことから深層学習を勉強しています。これまでQiitaにて深層学習のさわりについて書いてきました。
Chainerを用いた簡単なニューラルネットワーク実装
Chainerを用いた簡単なニューラルネットワーク実装〜データの準備編〜
Chainerを用いた簡単なニューラルネットワーク実装〜モデルの記述編〜
Chainerを用いた簡単なニューラルネットワーク実装〜最適化アルゴリズムの設定〜
目標としては画像を読み取り、それがなにであるのか分類するアプリを作りたいため、畳み込みニューラルネットワークについて勉強をします。理論の勉強ももちろんですが、実際にマシンに画像を学習させるとはどういうことなのか体験してみることにしました。
先人の知恵にあやかる
以前、こんな記事を見つけておもしろいな〜と思ったことがあります。
ディープラーニングでおそ松さんの六つ子は見分けられるのか 〜実施編〜
こちらの分類器にはchainerのNINモデルというImageNetを元に改造したモデルを使っています。
参考にしていたブログは
Hi-kingさんの
http://hi-king.hatenablog.com/entry/2015/06/11/021144
と
shi3zさんの
http://d.hatena.ne.jp/shi3z/20150709/1436397615
です。
サンプルのImageNetを動かしたかったのでこれらのブログを参考にすることに。(特にshi3zさんのブログはいつも読ませて頂いています!!!)
ただし、chainerはバージョンが変わるたびに仕様がころっと変わるため、1年以上前の記事であるこれらを参考にする際、注意が必要でした。
躓いた点はこちらにまとめてあります。
あとは上記ふたつの記事を参考にすれば学習してくれます。
実行環境
参考までに実行環境を書いておきます。
OS:Ubuntu14.04
GPU:GeForce GTX 750 Ti
memory:8GB
実践
学習中の様子
errorが0.2付近に近づけば学習を終了します。あまりにerrorが低すぎると過学習になってしまいます。
epochというのが学習のサイクルです。回数が増えるほど学習が進んでいます。
例えば、今回認識させてみた画像がこちら。
かわいらしいダルメシアンです。
ImageNetの画像にダルメシアンがいたため、今回はダルメシアンを採用しました
他にもサッカーボールとは陰と陽など、ダルメシアンと似た特徴(白黒の斑点)をもつ画像もちらほら。
学習結果
飛行機である確率43.1%、、、と。
さすがにまだ賢くありません。
しかし、これが28epoch進むと、
ダルメシアンである確率99.9%
見事賢くなりました。
おわりに
まずは画像をマシンに分類させるということがどういうことか体験することが出来ました。
今後の予定としては、
-サンプルではなく、自分の好きな画像を学習させる
-畳み込みニューラルネットワークの原理を理解すること
を目標に、勉強をしていきます。
参考
ディープラーニングでおそ松さんの六つ子は見分けられるのか 〜実施編〜
http://bohemia.hatenablog.com/entry/2015/11/22/174603
PFN発のディープラーニングフレームワークchainerで画像分類をするよ(chainerでニューラルネット1)
http://hi-king.hatenablog.com/entry/2015/06/11/021144
ChainerのNINで自分の画像セットを深層学習させて認識させる
http://d.hatena.ne.jp/shi3z/20150709/1436397615