【TensorFlow】MNISTデータを学習するプログラムを3種紹介!

今回は、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)

mnist_softmax

参考: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)

mnist_deep

参考: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)

cnn_mnist

参考: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」を試してみましょう。

mnist_deep

参考: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」をクリックし、「mnist_03」をクリックして、「Open Terminal」をクリックします。

tens-use01

(3)「D:」と入力し、Enterキーを押します。

tens-use02

(4)「cd TensorFlow」と入力し、Enterキーを押します。

tens-use03

(5)「python mnist_deep.py」と入力し、Enterキーを押します。

mnist_01

step 20000になると終了です。

終了すると、以下のように表示されます。

mnist_02

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.0TensorFlow 1.2TensorFlow 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データに限らず、ほかにも様々なタスクを処理するチュートリアルがありますので、気になるところを試してみてください!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次