Python
ImageProcessing
MachineLearning
classification
TensorFlow

TensorFlow公式分類チュートリアルMNISTサンプルのネットワーク構造

More than 1 year has passed since last update.

こちらはTensorFlow Advent Calendar 2017の9日目の記事です。


最近、画像の分類方法に関して色々と調べています。

MNISTをはじめ沢山の分類処理サンプルがありますが、どれを使用したらいいかわからないということで、公開されているサンプルの構造をまとめようと思っていたのですが、結局時間切れとなり、一番初歩的なTensorFlowの公式チュートリアルの構造について書きました。

これだけだと何番煎じかわからないですね。今後AlexNetやGoogLeNet等の有名なモデルもまとめていきたいと考えています。

初心者向けMNIST分類サンプル

数字の認識なのでクラスの数は10、画像は28x28の1チャンネルです。

https://www.tensorflow.org/get_started/mnist/beginners

Softmaxの手法を学ぶための、非常に単純な構造のネットワークです。28 x 28の画像(784画素)それぞれの重みづけを調整することで、10種類(0~9)の分類を行う、という方法です。出力層のみという単純ですが、これだけのpythonコードで最適化が実現できるのは面白いです。

エキスパート向けMNIST分類サンプル

https://www.tensorflow.org/get_started/mnist/pros

こちらは多少"ディープ"な構造を持つネットワークです。
* 畳みこみ層 1
* プーリング層 1
* 畳みこみ層 2
* プーリング層 2
* 全結合層
* 出力層

以下、畳みこみ層とプーリング層はセットで"隠れ層"と呼んで1カウントとします。

TensorBoardで構造を可視化しました。便利ですね。

2017-12-10 11.55.12.jpg

まとめ

ごめんなさい。これだけです。
学術的なものと産業利用とで興味の方向が違うためか、ネット上の情報をそのまま実運用に持って行くにはまだハードルが高いですね。学会や研究機関の発表ではネットワーク構造に関する提案が多い中、実際やってみるとより細かいパラメータ(ストライドやパディング、データセットの精度、前処理など)を変えるだけで数%程度はすぐに改善(改悪)したりします。しかもネットワークが巨大になるとそれだけ学習処理時間も増えます。結局のところ適用対象に合わせてのモデル選定、泥臭いパラメータチューニングが必要になるのでしょう。

Reference