Tensorboard标量和图表重复

时间:2017-03-17 00:28:26

标签: 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)

然后我创建了一个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) 

我运行代码三次。

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

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

enter image description here

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

enter image description here

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

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

2 个答案:

答案 0 :(得分:5)

我怀疑问题出现是因为你在这个过程中运行了三次代码(相同的脚本,Jupyter笔记本或其他),并且这些调用在TensorFlow中共享相同的"default graph"。 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,而另外两种方法可能更有用(例如,用于在多个单元格之间拆分执行)。

答案 1 :(得分:0)

发生此问题是为了保存多个图形,如果要解决此问题,这不是问题:

tf.reset_default_graph()