LoginSignup
1
1

More than 5 years have passed since last update.

05/10 初めての機械学習 〜Tensorflowを使って、手書きの数字を認識させる〜

Last updated at Posted at 2018-05-10

こちらは勉強会で使用する記事です。

勉強会終了後に、必要事項を記載して一般の向けに更新します。

実際の手順

画像データをダウンロードする
"MNIST_data"フォルダの下に配置されます

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

TensorFlowの読み込み
これで以下の「tf.~」の関数が使えるようになります

import tensorflow as tf

配列x(画像データの配列)を作成します。
placeholderとは、「入れ物」です。この入れ物にあとでデータを突っ込んでいきます。

x = tf.placeholder(tf.float32, [None, 784])

配列W(重み"weight"、xの係数)と、配列b(定数"bias")を作成します。
Variableは「変数」です。今回は初期値を全てゼロにしています。この二つを学習しながら変化させていくことになります。

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

配列y(ある画像の、それぞれの数字の確率)を作成します。これは式で決まるものです。

y = tf.nn.softmax(tf.matmul(x, W) + b)

配列y_を作成します。これは、実際の正解のデータが入る配列です。なので、またplaceholderを使って「入れ物」だけ用意します。

y_ = tf.placeholder(tf.float32, [None, 10])

今回は配列yをy_に近づけることが目的です。「その二つがどれくらい違うか」を示すのがcross_entropyになります。ここは今回深掘りしません。勾配降下法という手法を使用しています。さらに勉強したい人はご自分で調べてみてください。

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ *tf.log(y), reduction_indices=[1]))

このcross_entropyを小さくするステップが、train_stepです。

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

ここはおまじないだと思ってください。処理をスタートさせるための式です。

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

学習データかでWとbを学習させます。学習用データからランダムに100個持ってきて学習させる、というステップを1000回繰り返します。

for i in range (1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys })

実験後のyと、正しいデータy_がどれくらい正解しているかを示すaccurancyを定義します。

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accurancy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

テストデータをインプットしてみて、そのaccurancyを出力させます。

print(sess.run(accurancy, feed_dict={x: mnist.test.images, y_:mnist.test.labels}))

さあ、正解率は何%だったでしょうか???

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1