手書きの数字を判断するページ
TensorFlowのインストールやチュートリアルの解説をしたページを沢山読みましたが、チュートルアルのMNISTを実際にどのように使うかを説明したページは、見たことがありませんでした。
TensorFlowのMNISTチュートルアルの内容については、特にプログラマーでもデータサイエンティストでもないけど、Tensorflowを1ヶ月触ったので超分かりやすく解説がとてもわかりやすく、内部でどのような処理をしているのかが初めて分かりました。
しかし、元々、数学に関する素養が乏しいため「行列演算」と言われても良く分かりませんでした。「行列演算」の内容については、量子力学入門:Q&Aを読んでなんとなく分かりました。
機械学習で何をしているかというと、「求めたい”値”があってそれに限りなく近い数値を機械に計算させまくり学んでもらう。」という説明がありました。TEDのコンピュータが写真を理解するようになるまででも同じようなことが言われていました。
子供は教えられなくても 成長の初期にものの見方を身に付けるということです。子供は現実の世界における経験と例を通して学ぶのです。子供の目が生きたカメラで 200ミリ秒ごとに1枚写真を撮っていると考えてみましょう。これは目が動く平均時間です。すると子供は3歳になるまでに何億枚という現実世界の写真を見ていることになります。膨大な量の訓練例です。それで気が付いたのはアルゴリズムの改良ばかりに集中するのではなく、子供が経験を通じて受け取るような量と質の訓練データをアルゴリズムに与えてはどうかということでした。
MNISTの例で言うと、何万という数字の画像と、その数字が何かという情報(例えば3である)をコンピュータに見せて、覚えさせるということです。何万という画像から、数字ごとの特徴を覚えていくことで、数字が何であるかを判断できるようになります。
TensorFlowをインストールして、MNISTのチュートリアルを実行して、ロジスティック回帰を用いた単層と、多層畳み込みニューラルネットワークのものの識別率が違うことを確認しても、実際にその分別器をどのように使えば良いのかが分かりませんでした。
調べてみると、そのようなページを既に作られている方がいました。TensorFlowでのMNIST学習結果を、実際に手書きして試す。ソースはGitHubで公開されていたので、Macで動作確認してみました。
修正したところ
Macなのでrequirements.txtのtensorflowの対象ファイルを下記のものに変更しました。
https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.0-py2-none-any.whl
正常動作を確認しました。herokuへのアップロードの手順も書かれていたので、herokuへアップしてみました。
About the author and the blog
Masayuki Ariki is a Hobby Programmer and an not enthusiastic blogger, curious about any Python modules, Deep learning, and the web. More...