LoginSignup
2
2

More than 5 years have passed since last update.

Tensorflowの利用

Last updated at Posted at 2017-07-23

今回の目標

  • 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」にアクセス

mnist.png

NNが可視化されている。

今回はここまで
次回はチャットボットの作成の前段階になる
Sequence-to-Sequence Modelsの利用について

2
2
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
2
2