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中,为每次运行创建一个单独的标量窗口:
此外,如果我检查上次运行的数据,图表似乎是重复的:
每次运行时如何防止重复图形和标量窗口?
我怀疑问题出现是因为你在这个过程中运行了三次代码(相同的脚本,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,而另外两种方法可能更有用(例如,用于在多个单元格之间拆分执行).
| 归档时间: |
|
| 查看次数: |
2592 次 |
| 最近记录: |