Pythonの深層学習モジュール「TensorFlow」と「MNIST」を用いて、手書き数字認識をする方法についてソースコード付きでまとめました。
mnistの手書き文字認識
mnistのデータセットは、「6万枚の手書き数字の学習用画像」と「1万枚のテスト画像」が格納されています。
これらの画像は全て28×28[px]のグレースケール画像となっています。
mnistのデータセットは、機械学習の性能評価によく用いられます。
詳細→https://keras.io/ja/datasets/#mnist
TensorFlowでは、mnistのデータセットを使って簡単に手書き数字認識ができます。
サンプルコード(Python + TensorFlow)
サンプルプログラムのソースコードです。(AND演算)
# -*- coding:utf-8 -*- import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 繰り返し学習回数(1000回) epochs = 1000 # MNISTのデータセットを取得 mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) # モデルの作成 x = tf.placeholder(tf.float32, [None, 784]) # 入力信号(画像) W = tf.Variable(tf.zeros([784,10])) # 重みw b = tf.Variable(tf.zeros([10]))# バイアスb y = tf.nn.softmax(tf.matmul(x, W) + b)# 出力信号y(=活性化関数:ソフトマックス関数) # 教師信号(正解のラベルデータ) y_ = tf.placeholder(tf.float32, [None, 10]) # 誤差関数(損失関数) cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) # 勾配降下法で最適化(クロスエントロピーの最小化) train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) # 変数の初期化 init = tf.initialize_all_variables() # セッションの作成 sess = tf.Session() # セッションの開始と初期化 sess.run(init) # 繰り返し学習 for i in range(epochs): # 訓練用データのうちサンプルを100個ランダムに抽出 batch_xs, batch_ys = mnist.train.next_batch(100) # 確率的勾配降下法で重みを更新 sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) # 予測値と正解値の比較し、正解率を求めて表示 correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) accuracy_rate = sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}) print(str(i+1) + "回目の正解率:" + str(accuracy_rate))
■実行結果
︙ 997回目の正解率:0.9145 998回目の正解率:0.918 999回目の正解率:0.9195 1000回目の正解率:0.9206
– | 関連記事 |
---|---|
1 | ■【Python/TensorFlow入門】ディープラーニングの使い方 |
2 | ■【機械学習入門】アルゴリズム&プログラミング |
3 | ■Python入門 基本文法 |
コメント