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入門 基本文法 |

コメント