今回は、TensorFlowで機械学習を始めたときに、私もつまづいたMNISTデータを学習するプログラムについて整理していきます。
TensorFlowでMNISTデータを学習するチュートリアルを探していると、何回かに1回、まったく違うチュートリアルが見つかって、あれ?と思うことがありますね。
「MNIST For ML Beginners」、「Deep MNIST For Experts」、「A Guide to TF Layers」がよく出現するチュートリアルだと思います。
そこで、この記事では、3つのチュートリアル記事を紹介し、各プログラムの実行時間とaccuracy(正確さ)をまとめてみます。
そもそも、TensorFlowとMNISTデータって何?という方は、以下の記事を参照してください。
MNISTデータを学習するプログラム3種を紹介
TensorFlowの公式サイトには、いくつかチュートリアル記事があります。
その中に、MNISTデータを学習するプログラムは3種類存在します。
- MNIST For ML Beginners(mnist_softmax.py)
- Deep MNIST For Experts(mnist_deep.py)
- A Guide to TF Layers(cnn_mnist.py)
初めの頃は検索するたびに違うプログラムが見つかる印象があり、なんだか分かりにくいと感じていましたので、ここで3つのチュートリアル記事の特徴を整理して紹介したいと思います。
MNIST For ML Beginners(mnist_softmax.py)
参考:https://www.tensorflow.org/versions/r1.0/get_started/mnist/beginners
この記事は、TensorFlow 1.0用に書かれたチュートリアルです。
このチュートリアルで紹介しているプログラムでは、Softmax回帰を使う機械学習を実装しています。
1層のニューラルネットワークによる機械学習とも言えますね。
深層学習(Deep Learning)は、多層のニューラルネットワークによる機械学習手法ですので、mnist_softmax.pyは、深層学習のプログラムとは言えません。
mnist_softmax.pyについては、以下の記事でも解説していますので、ぜひご覧ください。
Deep MNIST For Experts(mnist_deep.py)
参考:https://www.tensorflow.org/versions/r1.2/get_started/mnist/pros
この記事は、TensorFlow 1.2用に書かれたチュートリアルです。
このチュートリアルで紹介しているプログラムでは、多層畳み込みネットワーク(CNN:Convolutional Neural Network)を使う深層学習を実装しています。
mnist_deep.pyについては、この記事の後半で紹介します。
A Guide to TF Layers(cnn_mnist.py)
参考:https://www.tensorflow.org/versions/r1.5/tutorials/layers
この記事は、TensorFlow 1.5用に書かれたチュートリアルです。
このチュートリアルで紹介しているプログラムでは、mnist_deep.pyと同じ多層畳み込みネットワーク(CNN:Convolutional Neural Network)を使う深層学習を実装しています。
mnist_deep.pyとは異なり、TensorFlowの高レベルAPIであるEstimator APIを利用した実装です。
実行例は、以下の記事で紹介していますので、ぜひご覧ください。
Deep MNIST For Expertsを試してみよう
では、ここからはチュートリアルの1つである「Deep MNIST For Experts」を試してみましょう。
参考:https://www.tensorflow.org/versions/r1.2/get_started/mnist/pros
まずは、以下のページから、mnist_deep.pyをダウンロードしてください。
参考:https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/examples/tutorials/mnist/mnist_deep.py
mnist_deep.pyを実行する
ダウンロードしたmnist_deep.pyは、Pythonのプログラムです。
ここでは、Anaconda NavigatorからGPU版TensorFlowをインストールしたPython環境を起動して、「D:\TensorFlow」フォルダに保存したmnist_deep.pyを実行する操作を説明します。
GPU版TensorFlowのインストール方法については、以下の記事をご覧ください。
(1)Anaconda Navigatorを起動します。
(2)「Environment」をクリック後、「tensorflow-gpu」をクリックし、「」をクリックして、「Open Terminal」をクリックします。
(3)「D:」と入力し、Enterキーを押します。
(4)「cd TensorFlow」と入力し、Enterキーを押します。
(5)「python mnist_deep.py」と入力し、Enterキーを押します。
step 20000になると終了です。
終了すると、以下のように表示されます。
accuracy(正確さ)に「0.9906」と表示されていますので、テストデータのうちの99%を正確に認識できたことがわかります。
3種のプログラムの性能を比較
この記事で紹介したチュートリアルのプログラムの性能を比較してみましょう。
チュートリアル | MNIST For ML Beginners (mnist_softmax.py) | Deep MNIST For Experts (mnist_deep.py) | A Guide to TF Layers (cnn_mnist.py) |
---|---|---|---|
TensorFlow対応バージョン | TensorFlow 1.0 | TensorFlow 1.2 | TensorFlow 1.5 |
プログラム概要 | Softmax回帰を使う機械学習 | 多層畳み込みネットワーク(CNN:Convolutional Neural Network)を使う深層学習 | 多層畳み込みネットワーク(CNN:Convolutional Neural Network)を使う深層学習 Estimator API使用 |
実行時間 | 約8秒 | 約190秒 | 約290秒 |
accuracy (正確さ) | 91.96% | 99.06% | 97% |
実行時間については目安です。また、accuracyは、テストデータをどの程度正確に判定できたかを表す数値で、実行するたびに変わります。
mnist_deep.pyが最も正確に判定していますね。
まとめ
TensorFlowの公式サイトで紹介されているチュートリアルの中から、MNISTデータを学習するチュートリアルを選んで、比較してみました。
もちろんこれ以外にもMNISTデータを学習するプログラムは書けます。
層をさらに深くしてみたり、各関数を別のアルゴリズムに変更してみたり、実際に試してみて、実行時間や性能がどのように変化するか、試してみると、TensorFlowや機械学習についての理解が進むと思います。
また、TensorFlowの公式サイトでは、MNISTデータに限らず、ほかにも様々なタスクを処理するチュートリアルがありますので、気になるところを試してみてください!