chainerでCNN組んでラーメン画像分類 (やってみた)
動機
どこかのphp入門書の帯にラーメンの種類(味噌ラーメンとか塩ラーメンとか)を機械学習で(?)見分けるという売り文句書いていたので、それにインスパイアされ、初心者にはうってつけの題材だと思ったので、chainerのCNN(Convolutional Neural Network)手習いとしてやってみました。
とりあえず読んだ本は
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (17件) を見る
- 作者: 岡谷貴之
- 出版社/メーカー: 講談社
- 発売日: 2015/04/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (13件) を見る
要件
画像から何ラーメンか見分けたい。以下のようにフォルダごとに分けた学習用画像がある。
中身は各種類の画像(写真はつけ麺フォルダ)
種類は家系ラーメン、二郎系ラーメン、味噌ラーメン、塩ラーメン、とんこつラーメン、つけ麺の7種類である。これらでCNNのモデルに学習させて分類器を生成する。
環境
MacBook Pro
Python 2.7.10
chainer 3.0.0
実装
datasetを作るやりかた。
非常に役に立ちました。
qiita.com
モデル
5層のネットワークです。畳み込みのパラメータは適当
1と2、2と3の間が畳み込みで繋がれて3と4, 4と5の間が全結合です。
特に根拠はありませんが、これのmnistの例を参考にしてみました。
- 作者: 新納浩幸
- 出版社/メーカー: オーム社
- 発売日: 2017/09/15
- メディア: 単行本
- この商品を含むブログ (1件) を見る
学習結果
validation/main/accuracyがmain/accuracyと乖離し、6割止まりであるため、
過学習していると思われます。
モデル、パラメータ、学習データをチューニングする必要がありそうです。
一応ソースも貼っておきます。
github.com
次回、いろいろ真面目に?チューニングがしたいの巻です。たぶん。