こちらはTensorFlow Advent Calendar 2017の9日目の記事です。
最近、画像の分類方法に関して色々と調べています。
MNISTをはじめ沢山の分類処理サンプルがありますが、どれを使用したらいいかわからないということで、公開されているサンプルの構造をまとめようと思っていたのですが、結局時間切れとなり、一番初歩的なTensorFlowの公式チュートリアルの構造について書きました。
これだけだと何番煎じかわからないですね。今後AlexNetやGoogLeNet等の有名なモデルもまとめていきたいと考えています。
初心者向けMNIST分類サンプル
数字の認識なのでクラスの数は10、画像は28x28の1チャンネルです。
Softmaxの手法を学ぶための、非常に単純な構造のネットワークです。28 x 28の画像(784画素)それぞれの重みづけを調整することで、10種類(0~9)の分類を行う、という方法です。出力層のみという単純ですが、これだけのpythonコードで最適化が実現できるのは面白いです。
エキスパート向けMNIST分類サンプル
こちらは多少"ディープ"な構造を持つネットワークです。
- 畳みこみ層 1
- プーリング層 1
- 畳みこみ層 2
- プーリング層 2
- 全結合層
- 出力層
以下、畳みこみ層とプーリング層はセットで"隠れ層"と呼んで1カウントとします。
TensorBoardで構造を可視化しました。便利ですね。
まとめ
ごめんなさい。これだけです。
学術的なものと産業利用とで興味の方向が違うためか、ネット上の情報をそのまま実運用に持って行くにはまだハードルが高いですね。学会や研究機関の発表ではネットワーク構造に関する提案が多い中、実際やってみるとより細かいパラメータ(ストライドやパディング、データセットの精度、前処理など)を変えるだけで数%程度はすぐに改善(改悪)したりします。しかもネットワークが巨大になるとそれだけ学習処理時間も増えます。結局のところ適用対象に合わせてのモデル選定、泥臭いパラメータチューニングが必要になるのでしょう。
Reference
- MNIST For ML Beginners | TensorFlow : https://www.tensorflow.org/get_started/mnist/beginners
- Deep MNIST for Experts | TensorFlow : https://www.tensorflow.org/get_started/mnist/pros
- TensorFlow 畳み込みニューラルネットワークで手書き認識率99.2%の分類器を構築 - Qiita : https://qiita.com/haminiku/items/36982ae65a770565458d
- 定番のConvolutional Neural Networkをゼロから理解する - DeepAge : https://deepage.net/deep_learning/2016/11/07/convolutional_neural_network.html
- あらゆるデータを可視化するTensorBoard徹底入門 - DeepAge : https://deepage.net/tensorflow/2017/04/25/tensorboard.html