ろこらぼ

僕の開発の手順とか実験結果とか感想とかをつらつら書き込んでいくお墓.僕の魂を成仏させるためのお墓です.いいね・ブクマ・コメント待ってます

TensorFlowでセッションとSaverについて

この記事から少しずつ機械学習要素がぽつぽつと出てきます.
今日はSaverとTensorBoardについてです.
前回の記事で,tf.session()を使って計算の実行を行いました.
TensorFlowの使い方をまだ知らないって人は,前回の記事をご覧ください.

www.nekorokomemordm.info

それでは始めます.

\二本立て/



Saverって?

Saverは,複数のセッションで計算結果を使いまわすときに使います.
セッションが変わると,変数は元の値になってしまうので,せっかく計算した値が別のセッションでは使われないということが発生してしまいます.
それのためにSaverを使います.
機械学習で,モデルの学習時にも使います.
一度,下記コードを実行してみます.

import tensorflow as tf

a = tf.Variable(1, name = 'a')
b = tf.assign(a, a + 1)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print("1:", sess.run(b))
    
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print("2:", sess.run(b))

これの実行結果は.
1: 2
2: 2
ということになります.
では,セッションが変わったときに,どうするかというと,さっきのSaverです.Saver込みのプログラムを示しておきます.

import tensorflow as tf

a = tf.Variable(1, name = 'a')
b = tf.assign(a, a + 1)

saver = tf.train.Saver()
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print("1:", sess.run(b))
    saver.save(sess, 'model/model.ckpt')
    
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    saver.restore(sess, save_path = 'model/model.ckpt')
    print("2:", sess.run(b))

これを実行すると,
1: 2
INFO:tensorflow:Restoring parameters from model/model.ckpt
2: 3
となります.
セッションが変わっても,値が初期化されずに済みました.
厳密にいうと,初期化されてますが,saver.saveで,モデルを保存して,saver.restoreで,モデルの読み込みをしています.

グラフの可視化

ここで言うグラフとは,データフローグラフのグラフのことです.
グラフの可視化には,TensorBoardを使います.初期装備です,追加のインストールはありません.
流れとしては,実行→サマリの書き出し→グラフの可視化
といった感じです.

早速プログラムです.

import tensorflow as tf

LOG_DIR = './logs'

a = tf.constant(1, name = 'a')
b = tf.constant(1, name = 'b')
c = a + b

graph = tf.get_default_graph()
with tf.summary.FileWriter(LOG_DIR) as write:
    write.add_graph(graph)

\こんなの覚えられないよ/
^^

これを実行すると,該当のディレクトリに"events.out....."みたいなファイルが保存されているはずです.

次にコマンドプロンプトを開いて,該当のディレクトリのひとつ前まで移動します.
Anacondaユーザーは[Open terminal]で新しく開きましょう.
そしたら,コマンドプロンプトで

>tensorboard --logdir=logs

を実行してください.
そうしたら,URLが出てきたと思うので,それにアクセスしてください.
ちなみに自分の場合は,出てきたURLだと,マシンによってはなぜかアクセスできませんでした.なので,http;//localhost:(出てきた番号)でアクセスしましょう.f:id:ryuga13tk:20190120164333p:plain

こんな感じで出てきます.

f:id:ryuga13tk:20190120163647p:plain

前回の記事にも登場しているのですが,aとbを足すんだなぁ・・・って感じのグラフですね.それ以外に言いようがありません.間違いない(確信).

現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)

現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)