Help us understand the problem. What is going on with this article?

TensorFlowチュートリアルやってみた MNIST 第3回

More than 1 year has passed since last update.

TensorFlowの公式チュートリアルをやってみました

mnist_softmax

手書きの文字を推定するプログラム
60000件の訓練データ
10000件のテストデータ
入力は画像データ784(28*28)

入力X 行784 列1
重みW 行訓練データ数 列784
バイアスb 行10 列1
y = softmax(W・x + b)

行列の掛け算(matrix multipilication)
matmul()

softmax関数

確立を表現するため
分類結果が入力データの関数として求められる
すべての出力の総和が1の活性化関数
y1,y2...y10(それぞれ数字の0~9の確立を表す)

正解は0と1で表される

ラベルデータとsoftmaxの出力をできるだけ近くなるように重み(w)とバイアス(b)を求める

クロスエントロピー

コスト関数(誤差)として
推定値と正解ラベルのズレを計算する

プログラムの流れ

MNISRデータの読み込み

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

tensorflowのインポート

import tensorflow as tf

入力と重みとバイアスの設定

placeholderで空の入れ物用意
Variable変数

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

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

出力(softmax)

出力は10個の要素、総和すると1となる。

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

正解ラベル(教師データ)の設定

cross_entropy(交差エントロピー)でyy_の差をどれくらい離れているかを計算する
reduce_mean(平均)
reduce sum(総和)

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)

データの初期化

sess = tf.InteractiveSession()

tf.global_variables_initializer().run()

バッチで訓練

バッチ100個のランダムなデータで訓練する。1000回繰り返す。
trainの中にある100個データを取り出す。
sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys})
train_step SGD(勾配降下法)で指定している
feed_dict={x: batch_xs, y_:batch_ys} データを与える元、xはバッチのx、yはバッチのy

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

評価

equal出力と正解ラベルを比較しTrue、Falseを返す。
argmax(y,1)出力の最大の要素を取り出す。
reduce_mean精度の平均値
castTrue、Falseを数値(割合)に変換
最後にテストデータで評価する

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

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

プログラム

最後にこれまでの流れをまとめたもの記述する。

mnist_softmax.py
# coding: utf-8
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

import tensorflow as tf

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

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

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


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)

sess = tf.InteractiveSession()

tf.global_variables_initializer().run()

for _ in range(1000):
    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))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_ : mnist.test.labels}))
taigamikami
大学生 自分の勉強・メモとしてQiitaに投稿しています。おかしいと思う部分は遠慮なくご指摘いただければと思います。 Ruby/Rails/Swift/iOS/Python
https://taigamikami.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした