TensorFlowを強力にも、複雑にもしているのが解析サマリー出力のTensorBoardであろう。
サマリーは、TensorBoardとして、デフォルトではローカルホストのウェブ上に、URL: http://localhost:6006 に出力される。ただし、出力用のコードを各所に埋め込んで、その上で準備ができたら、
1 |
tensorboard --logdir=output |
で、ローカルホストにサイトが立ち上がる。ここで、tendroboardの出力フォルダーと、TensorFlowのサマリーの出力フォルダーを一致させることが絶対条件となる。
tensoboardコマンドは、
1 2 3 |
--logdir DIR: フォルダ(ディレクトリ) --host HOST: ホストURL --port PORT: ポート番号 |
を指定することができる。
TensorBoardは、TensorFlowで作成したGraphを実際のグラフとして出力してくれるし、また機械学習のパラメータの変化を図に表示してくれる。
tensorboardのsummaryオペレーションは、tf.summary.に続く以下のコードの選択が取れる。
1 2 3 4 5 6 |
scalar(name, tensor, collections=None):スカラー値 histogram(name, values, collections=None):ヒストグラム audio(name, tensor, sample_rate, max_outputs=3, collections=None):オーディオ出力 image(name, tensor, max_outputs=3, collections=None):イメージ出力 merge(inputs, collections=None, name=None):サマリーの合体 merge_all(key= tf.GraphKeys.SUMMARIES):サマリー全体を合体 |
最後のmerge_allの引数には、Graph Collection Keysのサマリーを指定する tf.GraphKeys.SUMMARIES
が使用されている。
代表的な流れととしては、例えばスカラー値aやbをtensorboard表示したければ、
1 2 |
tf.summary.scalar("a", a) tf.summary.scalar("b", b) |
として、次にサマリーを合体:
1 |
merged_op = tf.summary.merge_all() |
次に、FileWriterクラスで、
1 2 |
tf.summary.FileWriter(logdir, graph=None, max_queue=10, flush_secs=120, filename_suffix=None) |
というように。出力ディレクトリlogdirと、デフォルトのGraphを指定する。具体的には以下のように:
1 |
writer = tf.summary.FileWriter("output", graph=tf.get_default_graph()) |
最後にsession()内で
1 2 3 4 |
with tf.Session() as sess: summary = sess.run(merged_op) writer.add_summary(summary) writer.close() |
とする。要するにセッション内で、merged_opを通じてtf.summary.merge_all()を実行してサマリー全体をまとめ、次にサマリー全体をwriterに送り込む。
FileWriterクラスのmethodには、
1 2 3 4 5 6 7 8 9 |
add_summary(summary, global_step=None) add_event(event) add_graph(graph, global_step=None, graph_def=None) add_meta_graph( meta_graph_def, global_step=None) add_run_metadata( run_metadata, tag, global_step=None) add_session_log( session_log, global_step=None) flush() close() reopen() |
OSによっては能動的に、最後に、
1 |
writer.flush() |
として、フラッシュさせないと書き込みしないケースがあるので注意が必要だ。
シンプルな実行例 a+b をあげておくと、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import tensorflow as tf a = tf.constant(1, name='first') b = tf.constant(2, name='second') sum = tf.add(a, b); tf.summary.scalar("sum", sum) merged_op = tf.summary.merge_all() with tf.Session() as sess: writer = tf.summary.FileWriter("logs", graph=tf.get_default_graph()) summary = sess.run(merged_op) writer.add_summary(summary) writer.close() |
で、tensorboardを、
1 |
tensorboard --logdir=logs |
でターミナルから起動させる。すると、graphは以下のように表示され、
firstとsecondがAddされて、結果sumがグラフ表示されることを解りやすくグラフ表示している!
足し算の結果のscalar値は、以下の様にグラフ表示される。