今回の目標
- Tensorflowでの機械学習
- TensorBoardの使い方
Tensorflowでの機械学習
TensorflowチュートリアルのMNISTを実行し、TensorBoard使用し学習結果を可視化してみる。
MNIST For ML Beginners
https://www.tensorflow.org/get_started/mnist/beginners
チュートリアルのコードをcloneする
git clone https://github.com/tensorflow/tensorflow
cd tensorflow/tensorflow/examples/tutorials/mnist
今回使用するのはmnist_softmax.py
TensorBoardで視覚化するために少々いじってます。
mnist_softmax.py
# coding:utf-8
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import argparse
import sys
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
FLAGS = None
def main(_):
# Import data
mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
# Create the model
# xはプレースホルダー(値の入る場所)
x = tf.placeholder(tf.float32, [None, 784], name="x")
# Variableは変更可能な値
W = tf.Variable(tf.zeros([784, 10]), name="W")
b = tf.Variable(tf.zeros([10]), name="b")
# xW+bを計算
y = tf.matmul(x, W) + b
# y_は教師データ(正解の値
y_ = tf.placeholder(tf.float32, [None, 10], name="y")
# y(教師データの入力から求まった値)と_y(教師データ)の交差エントロピー(正解の尺度)を求める
with tf.name_scope("cross-entropy") as scope:
cross_entropy = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
# 再急降下法で交差エントロピーの最小化をする
with tf.name_scope("training") as scope:
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
# セッションと変数の初期化
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
# TensorBoardで視覚化するためのデータ
summary_writer = tf.summary.FileWriter('mnist_data', graph=sess.graph)
# 1000回学習させる
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}))
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--data_dir', type=str, default='/tmp/tensorflow/mnist/input_data',
help='Directory for storing input data')
FLAGS, unparsed = parser.parse_known_args()
tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
あとは起動してみる
> python mnist_softmax.py
Extracting /tmp/tensorflow/mnist/input_data\train-images-idx3-ubyte.gz
Extracting /tmp/tensorflow/mnist/input_data\train-labels-idx1-ubyte.gz
Extracting /tmp/tensorflow/mnist/input_data\t10k-images-idx3-ubyte.gz
Extracting /tmp/tensorflow/mnist/input_data\t10k-labels-idx1-ubyte.gz
.
.
.
0.9157
結果が出たのでTensorBoardでNNを視覚化してみる。
>tensorboard --logdir=C:/work/minst/tensorflow/tensorflow/examples/tutorials/mnist/mnist_data
.
.
.
Starting TensorBoard b'47' at http://0.0.0.0:6006
(Press CTRL+C to quit)
logdirが先ほどのコードでsummary_writerで指定したディレクトリ
絶対パスで指定する。
ブラウザで「localhost:6006」にアクセス
NNが可視化されている。
今回はここまで
次回はチャットボットの作成の前段階になる
Sequence-to-Sequence Modelsの利用について