LoginSignup
1
1

More than 5 years have passed since last update.

jupyter notebook上でtensorboardを使うとscalarグラフが書き出されない時の対処法

Posted at

起こった症状

ローカルで実行した時はscalarグラフも表示されるのに、
jupyter notebook上で実行したらscalarグラフが表示されない...

こんな感じでグラフだけ表示されて...
スクリーンショット 2018-02-08 10.57.51.png

scalar開くと「No scalar data was found」って言われます。
スクリーンショット 2018-02-08 10.58.21.png

この時のコード

test_board.ipynb
import tensorflow as tf

# 既存のグラフを削除
tf.reset_default_graph()

# tensorboardファイル出力先
logdir = './logdir/'

a = tf.constant(2, name='a')
x = tf.placeholder(tf.int32, name='x')
y = tf.multiply(a, x, name='y')

# yの値をグラフに表示
tf.summary.scalar('y_value', y)

# 全てのサマリーを集約
merged = tf.summary.merge_all()

sess = tf.Session()

if tf.gfile.Exists(logdir):
    tf.gfile.DeleteRecursively(logdir) 
writer = tf.summary.FileWriter(logdir, sess.graph)

init = tf.global_variables_initializer()
sess.run(init)

for i in range(10):
    summary, res = sess.run([merged, y], feed_dict={
        x: i
    })
    writer.add_summary(summary, i)

print('------finish!------')

※このコードをローカルで実行すると、しっかりscalarグラフが表示されます。

対処法

add_summary()の呼出しが全て終了した後の部分に

writer.flush()

って入れます。

こんな感じです

for i in range(10):
    summary, res = sess.run([merged, y], feed_dict={
        x: i
    })
    writer.add_summary(summary, i)

'''追記箇所'''
writer.flush()

print('------finish!------')

ポイントは、add_summary()のすぐ後ではなく、add_summary()の呼出しが全て終わってから記述することです。

結果

こんな感じで、ちゃんとscalarグラフが表示されます。
スクリーンショット 2018-02-08 11.16.15.png

余談ですが、グラフの曲がり具合は横のsmoothingを動かすと変わります。
こんな感じです。
スクリーンショット 2018-02-08 11.18.08.png

理由

writer.flush()の説明を見ると、

Flushes the event file to disk.
Call this method to make sure that all pending events have been written to disk.

と記述されているので、イベントが溜まりっぱなしで書き出されてなかったからscalarグラフが表示されなかったようです。
ローカルで実行した時にscalarグラフが表示されたのは、プログラムが終了する時にtensorboardがこれを自動的に行ってくれていたから。

そう考えると確かに、jupyterのセルって一度実行するとそのセルの内容を別のセルでも利用できるから、プログラムが終了してない。
そうなると、勝手に呼び出してくれないので、明示的に記述しないとダメってことなのかな?って思いました。

※jupyterとかプログラムとかに別段詳しい訳ではないので不適切な言い回しなどがあるかもしれないですが、そういう場合はどんどん指摘していただけると嬉しいです!!

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