Worldを表示できても、全然機械学習じゃないよね...と思っていませんか?今回は、WindowsでTensorFlowを使って手書き数字を学習し、自分で書いた手書き数字の認識に挑戦してみます。画面を紹介しながら操作を説明しますので、TensorFlowをどうやって使うのかがよく分かると思います。肝心の手書き数字の認識については、結論から言うと、私が書いた数字は50%(4個中2個)の確率で認識できました。まとめTensorFlowとは?TensorFlowは、機械学習や深層学習のプログラムを実装する際に使用できるライブラリです。TensorFlowとは何か?については、以下の記事で説明していますので、よく分からない方は確認してみてくださいね。2019年10月14日TensorFlowを始める前にTensorFlowを始める前に、必要な知識とソフトウェアを確認しておきましょう。必要なソフトウェアは、PythonTensorFlowその他のライブラリです。それから、TensorFlowを始める前に「機械学習の対象とする大量のデータ」が必要であることも忘れてはいけません。Cのようなライブラリもありますが、これらはPythonのTensorFlowで学習したモデルを利用するためのライブラリです。TensorFlowのインストールTensorFlowは非常に新しいライブラリで、頻繁に更新されています。1.5:2018年1月バージョンによって、インストール手順が変わる場合がありますので、注意が必要です。10にインストールする手順は、以下の記事で説明しています。GPU版TensorFlowのインストール方法も説明していますので、ぜひご覧ください。2019年7月17日この記事では、上の記事に従ってGPU版TensorFlowをインストールした環境の操作を説明します。この記事の内容はCPU版TensorFlowでも問題なく動作しますが、GPU版TensorFlowであれば約1.5秒で終わる処理が、CPU版TensorFlowでは約30秒かかりましたので、GPU版TensorFlowを超オススメします!手書き数字の認識に挑戦!お待たせしました。TensorFlowで機械学習といえば、手書き数字の認識プログラムが有名です。ここからはTensorFlowを使って、手書き数字の認識に挑戦していきましょう。「手書き数字の認識プログラム」とは、以下のような画像を読み込むと、「3」が返ってくるプログラムです。この記事では、手書き数字の認識プログラム(cnn_mnist.py)をダウンロードして、手元のPCに機械学習をさせて、上の画像を読み込ませて「3」と表示させてみます。Network」(TensorFlowレイヤーガイド:畳み込みニューラルネットワークの構築)というページがあります。参考:https://www.tensorflow.org/tutorials/layers上のページでは、詳細な解説を交えつつ、手書き数字の認識プログラムを作成しています。この記事では、詳細な解説は上のページにお任せして、解説されているプログラムを試してみることにします。以下のページから、cnn_mnist.pyをダウンロードしてください。参考:https://github.com/tensorflow/tensorflow/blob/r1.5/tensorflow/examples/tutorials/layers/cnn_mnist.py手書き数字を学習するダウンロードしたcnn_mnist.pyは、Pythonのプログラムです。機械学習を実行するには、Pythonのプログラムの他に、大量の手書き数字のデータが必要であることは、すでに説明したとおりです。それでは、機械学習に必要な大量のデータはどこからダウンロードすればいいのでしょうか?実は、cnn_mnist.pyの以下の部分で、機械学習に必要な大量のデータをダウンロードする仕組みになっているのです。tf.contrib.learn.datasets.load_dataset("mnist")さて、プログラムの準備ができて、データのダウンロードにも目処が立ったところで、TensorFlowをインストールした環境で機械学習を実行してみましょう。NavigatorからGPU版TensorFlowをインストールしたPython環境を起動して、「D:\TensorFlow」フォルダに保存したcnn_mnist.pyを実行する操作を説明します。Navigatorを起動します。Terminal」をクリックします。(3)「D:」と入力し、Enterキーを押します。TensorFlow」と入力し、Enterキーを押します。cnn_mnist.py」と入力し、Enterキーを押します。このプログラムでは、手書き数字を認識させる際に必要なデータとして、MNISTと呼ばれるデータセットを利用しています。実行するときは、MNISTをダウンロードするので少し余計に時間がかかります。実行中は以下のような画面が表示されます。4801」の部分が、20000になると終了ですので、終了するまで待ちます。※2回目の実行では、20000から始まり40000になると終了します。これをリセットするには、「D:/tmp/mnist_convnet_model」フォルダを削除します。終了すると、以下のように表示されます。accuracy(正確さ)に「0.97」と表示されていますので、テストデータのうちの97%を正確に認識できたことがわかります。ペイントで手書き数字を準備するここまで読んでいただきましたが、残念ながら実感が湧きませんね。そこで、ここからは、実際に手書き数字を書いてみて、正しく認識できるか(PCが理解できる数字を書けるか)を確認してみましょう。Windows標準のペイントで手書き数字を作成しましょう。(1)ペイントを起動します。用意する画像は、縦28ピクセル×横28ピクセルにする必要があります。この大きさでは、小さすぎて数字を書くのは難しいので、大きい画像に数字を書いてから縮小します。(2)「サイズ変更」をクリックします。(3)「ピクセル」を選択し、「縦横比を維持する」のチェックを外して、「水平方向」と「垂直方向」に「280」と入力し、「OK」をクリックします。(4)「ブラシ」をクリックし、「クレヨン」をクリックします。手書きと言えば、クレヨンだと思いましたが、ほかのブラシでも挑戦してみてくださいね。(5)白いキャンバスをドラッグすると線が書けますので、「8」を書き、「サイズ変更」をクリックします。(6)「ピクセル」を選択し、「水平方向」に「28」と入力し、「OK」をクリックします。」をクリックし、「ハチ.png」として保存します。(ヨン.png)も作ってみました。手書き数字を認識してみるそれでは自分で書いた手書き数字を認識してみましょう!cnn_mnist.pyを書き替える手書き数字を認識するには、cnn_mnist.pyを少し書き替える必要があります。tf.app.run()次のように書き替えます。Library)をインストールしておきましょう。(二.png)から認識してみましょう。コマンドプロンプトで次のように入力します。ニ.png実行結果の最後に、以下のように認識結果が表示されます。CLASS:2このように「2」と表示されれば、認識成功です。同様の手順で他の画像も試してみました。簡単なようで、なかなか難しいですね。まとめ今回は、TensorFlowでMNISTを使って手書き文字を学習し、自分で書いた手書き文字を認識してみました。乱数が使われているため学習のたびに結果は変わりますし、学習回数を変えても結果は変わります。認識精度を上げるために、何が必要なのかは、機械学習の理論を学び、様々な試行錯誤を繰り返して習得していくと良いでしょう。がんばりましょう!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。