4用于cifar10的卷积神经网络-4.7TensorFlow的汇总类Summary和FileWriter用法

来源:互联网 发布:剑三捏脸数据妖孽成男 编辑:程序博客网 时间:2024/06/06 05:28

Summary类:负责汇总数据并写入事件文件
TensorBoard前台呈现的数据时tensorflow程序执行过程中,将一些summary类型的数据写入到日志目录的event文件中。下图标识了数据写入过程。
这里写图片描述


使用TensorBoard展示数据,需要在执行TensorFlow计算图的过程中,将各种类型的数据汇总并记录到日志文件中。然后使用TensorBoard读取这些日志文件,解析数据并生产数据可视化的web页面,让我们可以在浏览器中观察各种汇总数据。
这里写图片描述


summary_op包括了summary.scalar 、summary.histogram、summary.image等操作,这些操作输出的是各种summary protobuf,最后通过summary.writer写入到event文件中。
TensorFlow API中包含系列生产summary数据的API接口,这些函数将汇总信息存放在protobuf中,以字符串形式表达。
这里写图片描述


Summary类的汇总操作合并方法

将上面几种类型的汇总再进行一次合并,具体合并哪些由inputs指定,格式如下:

tf.summary.merge(inputs, collections=None, name=None)

合并默认图形中的所有汇总:

merged_summaries=tf.summary.merge_all(key='summaries')

牢记:merged_summaries是一个节点,必须先传入session.run()运行才能获得真正的汇总!

summary.FileWriter:将汇总结果写入事件(event file)

class FileWriter(SummaryToEventTransformer):  """Writes `Summary` protocol buffers to event files.  The `FileWriter` class provides a mechanism to create an event file in a  given directory and add summaries and events to it. The class updates the  file contents asynchronously. This allows a training program to call methods  to add data to the file directly from the training loop, without slowing down  training.  """  """  把 `Summary` protocol buffers 写入到event files。  这个`FileWriter`类提供了一个机制,能够在指定的目录下面创建event文件,然后将缓存中的summaries写入到event文件中去。  该类可以异步的更新(updates asynchronously)events文件的内容。  这个异步机制能够让程序在训练循环过程中调用add方法直接往文件中添加数据而不用阻塞循环训练过程导致训练速度减慢。  """

注意:
add_summary仅仅是向FileWriter对象的缓存中存放event data。而向disk上写数据是由FileWrite对象控制的。

  tf.summary.FileWriter.__init__(self,               logdir,               graph=None,               max_queue=10,               flush_secs=120,               graph_def=None):      Creates a `FileWriter` and an event file.    Args:      logdir: A string. Directory where event file will be written.      graph: A `Graph` object, such as `sess.graph`.      max_queue: Integer. Size of the queue for pending events and summaries.      flush_secs: Number. How often, in seconds, to flush the pending events and summaries to disk.      graph_def: DEPRECATED: Use the `graph` argument instead.    #max_queue:在向disk写数据之前,最大能够缓存event的个数    #flush_secs:每多少秒向disk中写数据,并清空对象缓存

使用的时候需要注意的地方:
1、 如果使用filewriter.add_summary(summary, global_step)时没有传global_step参数,会使scarlar_summary变成一条直线。

2、只要是在计算图上的Summary op,都会被merge_all捕捉到,不需要考虑变量生存空间问题!

3、如果执行一次,disk上没有保存Summary数据的话,可以尝试下filewriter.flush()


name_scope:让生成的汇总有层次性
典型的TensorFlow可以有数以千计的节点,如此多而难以一下全部看到,甚至无法使用标准图表工具来展示。为了简单起见,我们为变量名划定范围,并且可视化把该信息用于在图表中的节点上定义一个层级。默认情况下,只有顶层节点会显示。
这里写图片描述

name_scope还可以用于数据的汇总,让TensorBoard中的汇总数据也更有层次。
如果想要生成的summary有层次的话,记得在summary外面加一个name_scope

  with tf.name_scope('summary_gradients'):            tf.summary.histogram("name",gradients)

这样,tensorboard在显示的时候,就会有一个summary_gradients目录

阅读全文
0 0
原创粉丝点击