Tensorboard标量和图表重复

lma*_*999 5 tensorflow tensorboard

我正在使用TensorBoard来可视化网络指标和图表.

我创建一个会话sess = tf.InteractiveSession()并在Jupyter笔记本中构建图形.

在图中,我包含两个摘要标量:

with tf.variable_scope('summary') as scope:    
   loss_summary = tf.summary.scalar('Loss', cross_entropy)
   train_accuracy_summary = tf.summary.scalar('Train_accuracy', accuracy)
Run Code Online (Sandbox Code Playgroud)

然后我创建summary_writer = tf.summary.FileWriter(logdir, sess.graph)并运行:

_,loss_sum,train_accuracy_sum=sess.run([...],feed_dict=feed_dict)

我写了指标:

summary_writer.add_summary(loss_sum, i)
summary_writer.add_summary(train_accuracy_sum, i) 
Run Code Online (Sandbox Code Playgroud)

我运行代码三次.

每次运行时,我都会重新导入TF并创建一个新的交互式会话.

但是,在Tensorboard中,为每次运行创建一个单独的标量窗口:

在此输入图像描述

此外,如果我检查上次运行的数据,图表似乎是重复的:

在此输入图像描述

每次运行时如何防止重复图形和标量窗口?

  • 我希望所有数据都出现在相同的标量图中(具有多个系列/图).
  • 我希望每次运行都引用单个图形可视化.

mrr*_*rry 5

我怀疑问题出现是因为你在这个过程中运行了三次代码(相同的脚本,Jupyter笔记本或其他),这些调用在TensorFlow中共享相同的"默认图形".TensorFlow需要给图中的唯一名称每个节点,所以追加"_1""_2"在第二次和第三次调用汇总节点的名称.

你怎么避免这个?最简单的方法是每次运行代码时创建一个新图形.有(至少)三种方法可以做到这一点:

  • 将代码包装在一个with tf.Graph().as_default():块中,该块构造一个新tf.Graph对象并设置它是with块的范围的默认图形.

  • 如果创建图形之前构建会话,则可以将会话构造为sess = tf.InteractiveSession(graph=tf.Graph()).在tf.Graph您调用之前,新构造的对象仍然是默认图形sess.close().

  • 调用tf.reset_default_graph()代码的调用之间.

with嵌段办法是"最结构化"的方式做的事情,如果你正在编写一个脚本独立可能是最好的.但是,由于您正在使用tf.InteractiveSession,我假设您正在使用某种交互式REPL,而另外两种方法可能更有用(例如,用于在多个单元格之间拆分执行).