TensorFlowつかってみた
Python3.5で書いてみた。
TensorFlow
TensorFlowは Googleが作った機械学習ライブラリのこと。 深層学習以外にも使える。 書いたコードからニューラルネットワークの可視化できるも便利。
コード
from helper import * INPUT_SIZE = 2 CATEGORY_NUM = 1 # 出力ユニット数 LEARNING_RATE = 0.02 TRAINING_LOOP = 10000 # 学習回数 SUMMARY_DIR = 'test' # ログデータを保存するディレクトリ SUMMARY_INTERVAL = 1000 # 途中経過の出力 # データセットの準備 X = np.array([[1.,3.],[3., 1.],[5.,7.]]) Y = np.array([190., 330., 660.]).reshape(3,1) with tf.Graph().as_default(): # 入力 with tf.name_scope('input'): # 入力ベクトル x = tf.placeholder(tf.float32, [None, INPUT_SIZE], name='input_x') # 正解ラベル y_ = tf.placeholder(tf.float32, [None, CATEGORY_NUM], name='labels') # 出力 with tf.name_scope('readout'): # 重みベクトル W = weight_variable([INPUT_SIZE, CATEGORY_NUM], name='weight') # バイアスベクトル b = bias_variable([CATEGORY_NUM], name='bias') # 出力ベクトル y = tf.matmul(x, W) + b # 誤差関数と更新するアルゴリズムの定義 with tf.name_scope('optimize'): # 二乗誤差 loss = tf.reduce_mean(tf.square(y_ - y)) # パラメータ更新のためのアルゴリズム train_step = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(loss) loss_summary = tf.scalar_summary('loss', loss) # 学習 with tf.Session() as sess: # ログデータを入れるファイルを開く train_writer = tf.train.SummaryWriter(SUMMARY_DIR + '/train', sess.graph) test_writer = tf.train.SummaryWriter(SUMMARY_DIR + '/test', sess.graph) # 正解率の計算 correct_prediction = tf.equal(tf.sign(y), tf.sign(y_)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) train_accuracy_summary = tf.scalar_summary('accuracy', accuracy) test_accuracy_summary = tf.scalar_summary('accuracy', accuracy) # パラメータの更新 sess.run(tf.initialize_all_variables()) for i in range(TRAINING_LOOP + 1): sess.run([train_step], {x: X, y_: Y}) # 途中経過の出力 if i % SUMMARY_INTERVAL == 0: print('step %d' % i) summary = sess.run(tf.merge_summary([loss_summary, train_accuracy_summary]), {x: X, y_: Y}) train_writer.add_summary(summary, i) summary = sess.run(tf.merge_summary([test_accuracy_summary]), {x: X, y_: Y}) test_writer.add_summary(summary, i) # テストデータを入れてみる new_x = np.array([2., 4.]).reshape(1,2) new_y = sess.run(y, {x: new_x}) print(new_y)
可視化
可視化するためのコマンドでtensorboardっていうものがあるんですが、引数にログデータの絶対パスを入れる必要がある。 いちいち打つのめんどくさいから、greadlink を使って絶対パスを取得した。
$ tensorboard --logdir=`greadlink -f test` Starting TensorBoard b'16' on port 6006 (You can navigate to http://0.0.0.0:6006)
って出てくる。
そして、http://localhost:6006 にアクセスすると
と、出てくる。
今回は回帰問題を扱ってみた。