Doc*_*ven 8 python tensorflow tensorboard
我目前正在一个稍大的 TensorFlow 项目中工作,并尝试像往常一样可视化网络的某些变量,即执行此工作流程
tf.summary.scalar('loss', loss)summary_op = tf.summary.merge_all()writer = tf.summary.FileWriter('PATH')并添加图表s = sess.run(summary_op)writer.add_summary(s, epoch)通常这对我有用。但这一次,我只显示了图表,当我检查事件文件时,我发现它是空的。巧合的是,我发现有人建议writer.flush()在添加我的摘要作为第 6 步后使用。这解决了我的问题。
因此,合乎逻辑的后续问题是:我必须何时以及如何使用FileWriter.flush()才能使 tensorflow 正常工作?
jde*_*esa 10
你可以随时打电话flush,真的。这对您来说可能很清楚,但以防万一(以及其他读者),FileWriter不会立即将给定的摘要写入磁盘。这是因为写入磁盘的速度相对较慢,如果您创建非常频繁的摘要(即每批),这样做可能会损害您的性能,因此请FileWriter保留一个仅“每隔一段时间”写入的事件缓冲区(最后关闭时)。但是,这意味着 TensorBoard 不会立即看到书面摘要。flush是否可以强制将FileWriter内存中的任何内容写入磁盘。
如果您生成的摘要频率较低(例如每 100 个批次),则flush在add_summary. 如果您不断地生成摘要,但对 的同步频率不满意FileWriter,您可以有一个flush例如每十次或类似的东西。我的意思是,您也可以在每次迭代中使用它,它可能不会产生如此大的差异,但也不会给您带来如此大的好处。当然,任何潜在的性能影响都将取决于您的问题和您的基础设施(它不同于图像的日志标量,或者记录到本地 SSD 驱动器而不是网络存储,或者具有数百个元素的大而缓慢的批次而不是微小的,快速批次,只有少数)。
但是,一般来说,它很少是一个重要的性能因素。对于简单的场景,你得到的添加flushafter add_summary(一个flush,如果你有多个调用add_summary不要flush在每个调用之后,只在最后一个之后)的建议很可能已经足够好了。
编辑:tf.summary.FileWriter实际上提供了一个构造参数,flush_secs它定义了编写器将挂起事件自动刷新到磁盘的频率。默认情况下是两分钟。还有一个max_queue,它定义了内部事件队列(事件缓冲区)的大小。
| 归档时间: |
|
| 查看次数: |
3180 次 |
| 最近记录: |