mnist(手書きデータ)を使って簡単な機械学習

以下のサンプルを python インタープリター上でペーストすれば簡単に機械学習を体験できます。

mnistとは「Mixed National Institute of Standards and Technology database」の略で手書きの数字0~9 (28x28) が数万枚準備されています。初心者向けの機械学習用の画像データです。

スポンサーリンク

Python 2.7.12
Ubuntu 16.04.2 LTS
tensorflow (1.1.0)

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf

#mnist(手書きデータ)の読み込みと展開
mnist = input_data.read_data_sets("./MNIST_data/", one_hot=True)
sess = tf.InteractiveSession()
 

# フェーズ1:モデルの作成 -----------------------------------------------------------------
#クラスは0~9の10クラス
#1文字のベクタ数は784

#プレイスホルダーを定義。浮動小数点の2Dテンソルを定義。Noneで任意の長さを取ることを宣言。
x  = tf.placeholder(tf.float32, [None, 784])

#正解に関するプレイスホルダを定義。
y_label = tf.placeholder(tf.float32, [None, 10])

#各ベクタに対する重みをクラス数分。
W = tf.Variable(tf.zeros([784, 10]))

#クラス数分のバイアスを定義
b = tf.Variable(tf.zeros([10]))

#クラスごとのエビデンスを定義
y = tf.nn.softmax(tf.matmul(x, W) + b)


#損失(あるいはコストとも呼ばれる)を定義。交差エントロピー(Cross Entropy)を使用。これを小さくするのが目標。
#reduce_sumで全体を加算。
ce = -tf.reduce_sum(y_label * tf.log(y))


#ceを最小化するように訓練を定義(train step)
ts = tf.train.GradientDescentOptimizer(0.01).minimize(ce)


#訓練を実行-----------------------------------------------------------------
#変数を初期化
tf.initialize_all_variables().run()
for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    ts.run({x: batch_xs, y_label: batch_ys})

 

#結果のテスト
cp = tf.equal(tf.argmax(y, 1), tf.argmax(y_label, 1))
accuracy = tf.reduce_mean(tf.cast(cp, tf.float32))
print(accuracy.eval({x: mnist.test.images, y_label: mnist.test.labels}))


実行結果

実行結果は以下の通りです。(一部省略)結果は91%の正答率となっています。

>>> print(accuracy.eval({x: mnist.test.images, y_label: mnist.test.labels}))
0.919

スポンサーリンク

[Tensorflow メモへ戻る]