Tensorboard 标量和图形重复
Tensorboard scalars and graphs duplicated
我正在使用 TensorBoard 可视化网络指标和图表。
我创建了一个会话 sess = tf.InteractiveSession()
并在 Jupyter notebook 中构建图表。
在图中,我包含了两个汇总标量:
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 中,为每个 运行:
创建了一个单独的标量 window
此外,如果我检查最后一个 运行:
的数据,图表似乎是重复的
如何防止每次 运行 时图形和标量 window 重复?
- 我希望所有数据都出现在相同的标量图中(具有多个系列/图)。
- 我希望每个 运行 引用一个图表可视化。
我怀疑问题的出现是因为您在该过程中 运行 三次调用代码(相同的脚本、Jupyter notebook 或其他),并且这些调用在 TensorFlow 中共享相同的 "default graph" . TensorFlow 需要给图中的每个节点一个唯一的名称,因此它在第二次和第三次调用时将 "_1"
和 "_2"
附加到摘要节点的名称。
你如何避免这种情况?最简单的方法是每次 运行 代码时创建一个新图表。有(至少)三种方法可以做到这一点:
将代码包装在 with tf.Graph().as_default():
block, which constructs a new tf.Graph
对象中并将其设置为 with
块范围的默认图形。
如果您在创建图表之前构建您的会话,您可以将您的会话构建为sess = tf.InteractiveSession(graph=tf.Graph())
。新构造的 tf.Graph
对象保持为默认图,直到您调用 sess.close()
.
在代码调用之间调用 tf.reset_default_graph()
。
with
-block 方法是 "most structured" 做事的方法,如果您正在编写独立脚本,这可能是最好的方法。但是,由于您使用的是 tf.InteractiveSession
,我假设您使用的是某种交互式 REPL,而其他两种方法可能更有用(例如,将执行拆分到多个单元格中)。
如果你想解决这个问题,这个问题发生在持有多个图表上:
tf.reset_default_graph()
我正在使用 TensorBoard 可视化网络指标和图表。
我创建了一个会话 sess = tf.InteractiveSession()
并在 Jupyter notebook 中构建图表。
在图中,我包含了两个汇总标量:
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 中,为每个 运行:
创建了一个单独的标量 window此外,如果我检查最后一个 运行:
的数据,图表似乎是重复的如何防止每次 运行 时图形和标量 window 重复?
- 我希望所有数据都出现在相同的标量图中(具有多个系列/图)。
- 我希望每个 运行 引用一个图表可视化。
我怀疑问题的出现是因为您在该过程中 运行 三次调用代码(相同的脚本、Jupyter notebook 或其他),并且这些调用在 TensorFlow 中共享相同的 "default graph" . TensorFlow 需要给图中的每个节点一个唯一的名称,因此它在第二次和第三次调用时将 "_1"
和 "_2"
附加到摘要节点的名称。
你如何避免这种情况?最简单的方法是每次 运行 代码时创建一个新图表。有(至少)三种方法可以做到这一点:
将代码包装在
with tf.Graph().as_default():
block, which constructs a newtf.Graph
对象中并将其设置为with
块范围的默认图形。如果您在创建图表之前构建您的会话,您可以将您的会话构建为
sess = tf.InteractiveSession(graph=tf.Graph())
。新构造的tf.Graph
对象保持为默认图,直到您调用sess.close()
.在代码调用之间调用
tf.reset_default_graph()
。
with
-block 方法是 "most structured" 做事的方法,如果您正在编写独立脚本,这可能是最好的方法。但是,由于您使用的是 tf.InteractiveSession
,我假设您使用的是某种交互式 REPL,而其他两种方法可能更有用(例如,将执行拆分到多个单元格中)。
如果你想解决这个问题,这个问题发生在持有多个图表上:
tf.reset_default_graph()