Help us understand the problem. What is going on with this article?

【TensorBoard入門】TensorFlow処理を見える化して理解を深める

More than 1 year has passed since last update.

TensorBoardでTensorFlowの理解を早める

文系卒でDeep LearningどころかPythonも初めてだと、TensorFlowを理解するのが遅くてなかなか苦しいです。少しでも理解を早めるためにもTensorBoardを学習しました。複雑なディープラーニングの理解促進はもちろん、デバッグや処理最適化・再設計などいろんなことに使えます。いろいろな見える化ができるのですが、当記事は入門者に向けたGraph出力方法に絞って解説します(もっと広く深くできればいいのですが、そこまで筆者の理解が追いついていません:sweat:)。
公式ガイド「TensorBoard: Visualizing Learning」がわかりにくかったので、かなり簡素化しています。
TensorBoardで処理を可視化するのサイトが素晴らしく、かなり参考にさせて頂きました。
環境:python3.5 tensorflow1.1とtensorflow1.21の両方で確認済

参考リンク

TensorBoard(Graph)の簡単なロジック

1+2 の式をGraphで見える化

こんな感じで定数の1+2を計算して、見える化します。正直、非常に簡単です。

import tensorflow as tf
sess = tf.InteractiveSession()

# TensorBoard情報出力ディレクトリ
log_dir = '/tmp/tensorflow/mnist/logs/simple01'

# 指定したディレクトリがあれば削除し、再作成
if tf.gfile.Exists(log_dir):
    tf.gfile.DeleteRecursively(log_dir)
tf.gfile.MakeDirs(log_dir)

# 定数で1 + 2
x = tf.constant(1, name='x')
y = tf.constant(2, name='y')
z = x + y

# このコマンドでzをグラフ上に出力
_ = tf.summary.scalar('z', z)

# SummaryWriterでグラフを書く(これより後のコマンドはグラフに出力されない)
summary_writer = tf.summary.FileWriter(log_dir , sess.graph)

# 実行
print(sess.run(z))

# SummaryWriterクローズ
summary_writer.close()

その後にTensorboardを起動します。筆者の環境はAnacondaで構築しているので、まずAnaconda NavigatorからTerminalを起動しています。
30.TensorFlow_Install01.JPG

で、TerminalからTensorbaordをディレクトリを指定して起動します(Pythonプログラム内変数log_dirにディレクトリを格納しています)。

tensorboard --logdir=/tmp/tensorflow/mnist/logs/simple01

起動後にブラウザで http://localhost:6006/ を開くとTensorBoard画面が表示されます。

TensorBoardBasic00.JPG

「No scalar data was found(データがないぞ)」と怒られますが、今回はscalarは出力しておらず、Graph出力のみとしているので問題ありません。画面上にあるメニューで「Graphs」を選ぶことで下図のGraphが出力されます。ここで1+2の計算式を見ることができました。

TensorBoardBasic01.JPG

tf.name_scopeを使ってグルーピング

先程のソースコードにtf.name_scopeを加えるとグルーピングができます。

import tensorflow as tf
sess = tf.InteractiveSession()

# TensorBoard情報出力ディレクトリ
log_dir = '/tmp/tensorflow/mnist/logs/simple02'

# 指定したディレクトリがあれば削除し、再作成
if tf.gfile.Exists(log_dir):
    tf.gfile.DeleteRecursively(log_dir)
tf.gfile.MakeDirs(log_dir)

# add_scopeという名称でグルーピング
with tf.name_scope('add_scope'):

    # 定数で1 + 2
    x = tf.constant(1, name='x')
    y = tf.constant(2, name='y')
    z = x + y

    # このコマンドでzをグラフ上に出力
    _ = tf.summary.scalar('z', z)


# SummaryWriterでグラフを書く(これより後のコマンドはグラフに出力されない)
summary_writer = tf.summary.FileWriter(log_dir , sess.graph)

# 実行
print(sess.run(z))

# SummaryWriterクローズ
summary_writer.close()

結果
add_scopeという名称でグループ化(枠)ができています。計算が複雑な場合に、グループ化できないと見にく過ぎて厳しいです。

TensorBoardBasic02.JPG

式の階層化

先程のソースコードにtf.name_scopeをさらに入れ子で追加して複数式の階層化をします。

import tensorflow as tf
sess = tf.InteractiveSession()

# TensorBoard情報出力ディレクトリ
log_dir = '/tmp/tensorflow/mnist/logs/simple02'

# 指定したディレクトリがあれば削除し、再作成
if tf.gfile.Exists(log_dir):
    tf.gfile.DeleteRecursively(log_dir)
tf.gfile.MakeDirs(log_dir)

#add_scopeという名称でグルーピング
with tf.name_scope('add_scope'):

    # 定数で1 + 2
    x = tf.constant(1, name='x')
    y = tf.constant(2, name='y')
    z = x + y

    # このコマンドでzをグラフ上に出力
    _ = tf.summary.scalar('z', z)

    # 上の結果に掛け算
    with tf.name_scope('multiply_scope'):
        zz = y * z

# SummaryWriterでグラフを書く(これより後のコマンドはグラフに出力されない)
summary_writer = tf.summary.FileWriter(log_dir , sess.graph)

# 実行
print(sess.run(z))

# SummaryWriterクローズ
summary_writer.close()

結果
階層化してすっきりしました。

TensorBoardBasic03.JPG

参考
ちなみに階層化ではなく、同列にするとこんな形で出力されます。

TensorBoardBasic04.JPG

FukuharaYohei
気の向いたままにいろいろと書きます。 仕事はSAP関連で、HANA、Fiori、SAPUI5、BusinessObjectsなどいろいろやっています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした