目录
2、tf.summary.FileWriterCache()类
3、tf.summary.get_summary_description()函数
9、tf.summary.tensor_summary()函数
一、类和函数
在TensorFlow中,最常用的可视化方法有三种途径,分别为TensorFlow与OpenCv的混合编程、利用Matpltlib进行可视化、利用TensorFlow自带的可视化工具TensorBoard进行可视化。这三种方法,在前面博客中都有过比较详细的介绍。但是,TensorFlow中最重要的可视化方法是通过TensorBoard、tf.Summary和tf.summary.FileWriter这三个模块相互合作来完成的。
1、类
class FileWriter
: 将摘要协议缓冲区写入事件文件。
class FileWriterCache
: 文件写入器缓存。
2、函数
all_v2_summary_ops(...)
: 返回当前默认图中定义的所有v2样式的摘要操作。
audio(...)
: 输出带有音频的摘要协议缓冲区。
get_summary_description(...)
: 给定一个TensorSummary node_def,检索它的摘要描述。
histogram(...)
: 输出带有直方图的摘要协议缓冲区。
image(...)
: 输出带有图像的摘要协议缓冲区。
initialize(...)
: 初始化用于图形执行模式的摘要编写。
merge(...)
: 合并摘要。
merge_all(...)
: 合并默认图中收集的所有摘要。
scalar(...)
: 输出包含单个标量值的摘要协议缓冲区。
tensor_summary(...)
: 使用序列化的张量.proto输出摘要协议缓冲区。
text(...)
: 总结了文本数据。
1、tf.summary.FileWriter()类
将摘要协议缓冲区写入事件文件。FileWriter类提供了一种机制,用于在给定目录中创建事件文件,并向其中添加摘要和事件。该类异步更新文件内容。这允许训练程序调用方法直接从训练循环中将数据添加到文件中,而不会减慢训练的速度。当使用tf.compat.v1.Session参数构造时,FileWriter会在新的基于图的摘要(tf.contrib.summary)上形成一个兼容层,以便使用预先存在的代码(需要FileWriter实例)编写新的摘要。
1、__init__
__init__(
logdir,
graph=None,
max_queue=10,
flush_secs=120,
graph_def=None,
filename_suffix=None,
session=None
)
创建一个FileWriter,可选地在给定会话中共享。通常,构造文件写入器会在logdir中创建一个新的事件文件。此事件文件将包含调用以下函数之一时构造的事件协议缓冲区:add_summary()、add_session_log()、add_event()或add_graph()。如果你将图形传递给构造函数,它将被添加到事件文件中。(这相当于稍后调用add_graph())。TensorBoard将从文件中选择图形并以图形方式显示,这样你就可以交互式地查看您构建的图形:
...create a graph...
# Launch the graph in a session.
sess = tf.compat.v1.Session()
# Create a summary writer, add the 'graph' to the event file.
writer = tf.compat.v1.summary.FileWriter(<some-directory>, sess.graph)
构造函数的会话参数使返回的FileWriter成为基于图的新摘要(tf.contrib.summary)上的兼容层。至关重要的是,这意味着底层的writer资源和事件文件将与使用相同会话和logdir的任何其他FileWriter共享,并与任何tf.contrib.summary共享。使用相同的共享资源名称(默认范围为logdir)在此会话中编写摘要。如果不存在这样的资源,将使用此构造函数的其余参数创建一个,但是如果已经存在这些参数,则忽略它们。
参数:
- logdir: 一个字符串。将写入事件文件的目录。
- graph: 图形对象,如sess.graph。
- max_queue: 整数。等待事件和摘要的队列大小。
- flush_secs: 号码。将挂起的事件和摘要刷新到磁盘的频率(以秒为单位)。
- graph_def: DEPRECATED:使用graph参数。
- filename_suffix: 一个字符串。每个事件文件的名称都带有后缀。
- session: tf.compat.v1.Session对象。
可能产生的异常:
-
RuntimeError
: If called with eager execution enabled.
2、__enter__
__enter__()
使用with语句。
3、__exit__
__exit__(
unused_type,
unused_value,
unused_traceback
)
使用with语句。
4、add_event
add_event(event)
将事件添加到事件文件中。
参数:
- event: 事件协议缓冲区。
5、add_graph
add_graph(
graph,
global_step=None,
graph_def=None
)
将图形添加到事件文件中。协议缓冲区描述的图形将由TensorBoard显示。大多数用户在构造函数中传递一个图。
参数:
- graph: 图形对象,如ses .graph。
- global_step: 号码。可选的全局步骤计数器,以记录与图形。
- graph_def: 弃用。而是使用graph参数。
可能产生的异常:
-
ValueError
: If both graph and graph_def are passed to the method.
6、add_meta_graph
add_meta_graph(
meta_graph_def,
global_step=None
)
将MetaGraphDef添加到事件文件中。MetaGraphDef允许通过saver.import_meta_graph()运行给定的图。
参数:
- meta_graph_def: MetaGraphDef对象,通常由saver.export_meta_graph()返回。
- global_step: 号码。可选的全局步骤计数器,以记录与图形。
可能产生的异常:
-
TypeError
: If bothmeta_graph_def
is not an instance ofMetaGraphDef
.
7、add_run_metadata
add_run_metadata(
run_metadata,
tag,
global_step=None
)
为单个session.run()调用添加元数据信息。
参数:
- run_metadata: 一个RunMetadata原buf对象。
- tag: 此元数据的标记名称。
- global_step: 号码。可选的全局步骤计数器,以记录与StepStats。
可能产生的异常:
-
ValueError
: If the provided tag was already used for this type of event.
8、add_session_log
add_session_log(
session_log,
global_step=None
)
向事件文件添加一个SessionLog协议缓冲区。此方法将提供的会话包装在事件协议缓冲区中,并将其添加到事件文件中。
参数:
- session_log: 一个SessionLog协议缓冲区。
- global_step: 号码。可选的全局步骤值,以记录摘要。
9、add_summary
add_summary(
summary,
global_step=None
)
将摘要协议缓冲区添加到事件文件中。此方法将提供的摘要封装在事件协议缓冲区中,并将其添加到事件文件中。你可以使用tf.Session.run或tf.Tensor来传递计算任何总结op的结果。对这个函数求eval。或者,你可以传递一个tf.compat.v1.Summary协议缓冲区,该缓冲区由您自己的数据填充。后者通常用于在事件文件中报告评估结果。
参数:
summary
:摘要协议缓冲区,可选地序列化为字符串。- global_step:号码。可选的全局步骤值,以记录摘要。
10、close
close()
将事件文件刷新到磁盘并关闭该文件。当你不再需要摘要编写器时调用此方法。
11、flush
flush()
将事件文件刷新到磁盘。调用此方法以确保所有挂起事件都已写入磁盘。
12、get_logdir
get_logdir()
返回将写入事件文件的目录。
13、reopen
reopen()
EventFileWriter重开。可以在close()之后调用,以便在同一目录中添加更多事件。事件将进入一个新的事件文件。如果EventFileWriter未关闭,则不执行任何操作。
2、tf.summary.FileWriterCache()类
这个类缓存文件写入器,每个目录一个。
1、clear
@staticmethod
clear()
清除缓存的摘要写入器。目前仅用于单元测试。
2、get
@staticmethod
get(logdir)
返回指定目录的文件写入器。
参数:
- logdir: str类型,目录名。
返回值:
- A
FileWriter
.
3、tf.summary.get_summary_description()函数
给定一个TensorSummary node_def,检索它的摘要描述。
tf.summary.get_summary_description(node_def)
当概要op被实例化时,相关元数据的摘要描述存储在它的NodeDef中。此方法检索描述。
参数:
- node_def: 一个TensorSummary操作的node_def_pb2.NodeDef
返回值:
- 一个summary_pb2.SummaryDescription
可能产生的异常:
-
ValueError
: if the node is not a summary op.
4、tf.summary.histogram()函数
输出带有直方图的摘要协议缓冲区。
tf.summary.histogram(
name,
values,
collections=None,
family=None
)
添加直方图摘要使您能够可视化数据在TensorBoard中的分布。在这里看到关于TensorBoard直方图仪表板的详细说明。生成的摘要有一个摘要值,其中包含值的直方图。如果任何值不是有限的,该op将报告InvalidArgument错误。
参数:
- name: 生成的节点的名称。也将作为一个系列名称在TensorBoard。
-
values
: 一个实数张量。任何形状。用于构建直方图的值。 -
collections
: 可选的图形集合键列表。新的summary op被添加到这些集合中。默认为[GraphKeys.SUMMARIES]。 -
family
: 可选的;如果提供,用作摘要标记名称的前缀,它控制用于在Tensorboard上显示的选项卡名称。
返回值:
- 字符串类型的标量张量。序列化的摘要协议缓冲区。
5、tf.summary.image()函数
输出带图像的protocol buffe,汇总数据的图像的的形式如下: ' tag /image/0', ' tag /image/1'...,如:input/image/0等。
tf.summary.image(
name,
tensor,
max_outputs=3,
collections=None,
family=None
)
摘要最多有max_output包含图像的摘要值。图像由张量构成,张量必须为4-D,形状[batch_size, height, width, channels],通道可以是:
- 1: 张量被解释为灰度。
- 3: 张量被解释为RGB。
- 4: 张量被解释为RGBA。
图像的通道数与输入张量相同。对于浮点数输入,每次将值规范化为一个图像,以适应范围[0,255]。uint8值不变。op使用两种不同的归一化算法:
- 如果所有的输入值都是正数,那么就对它们进行重新排序,使最大的值为255。
- 如果任何输入值为负,则值将被移动,因此输入值0.0位于127。然后对它们重新排序,使最小的值为0,或者最大的值为255。
输出摘要中的Summary.Value的protobufs根据名称生成,后缀取决于max_output设置:
- 如果max_output为1,则summary value标记为'name/image'。
- 如果max_output大于1,则按“name/image/0”、“name/image/1”等顺序生成摘要值标记。
参数:
- name: 生成的节点的名称。也将作为一个系列名称在TensorBoard。
-
tensor
: 一个4- d uint8或浮点32张量,形状[batch_size, height, width, channels],其中channels是1、3或4。 - max_output: 生成图像的批处理元素的最大数量。
-
collections
: 可选的op.graphkeys列表。要将摘要添加到其中的集合。默认为[_ops.GraphKeys.SUMMARIES]。 -
family
: 可选的;如果提供,用作摘要标记名称的前缀,它控制用于在Tensorboard上显示的选项卡名称。
返回值:
- 字符串类型的标量张量。序列化的摘要协议缓冲区。
6、tf.summary.merge()函数
此op创建一个摘要协议缓冲区,其中包含输入摘要中所有值的并集。当Op运行时,如果要合并的摘要中的多个值使用相同的标记,那么它将报告InvalidArgument错误。
参数:
inputs
: 包含序列化摘要协议缓冲区的字符串张量对象列表。collections
: 可选的图形集合键列表。新的summary op被添加到这些集合中。默认为[]。- name: 操作的名称(可选)。
返回值:
- 字符串类型的标量张量。合并产生的序列化摘要协议缓冲区。
可能产生的异常:
RuntimeError
: If called with eager mode enabled.
7、tf.summary.merge_all()函数
合并默认图中收集的所有摘要。
tf.summary.merge_all(
key=tf.GraphKeys.SUMMARIES,
scope=None,
name=None
)
参数:
- key: GraphKey用于收集摘要。默认为GraphKeys.SUMMARIES。
scope
: 使用re.match筛选摘要操作的可选作用域。
返回值:
- 如果没有收集摘要,则返回None。否则返回字符串类型的标量张量,其中包含合并后的序列化摘要协议缓冲区。
可能产生的异常:
RuntimeError
: If called with eager execution enabled.
8、tf.summary.scalar()函数
用来显示标量信息,其格式为:
tf.summary.scalar(
name,
tensor,
collections=None,
family=None
)
生成的摘要有一个张量,包含输入张量的原式。
参数:
- name: 生成的节点的名称。也将作为系列名称在TensorBoard。
-
tensor
: 包含一个单值的实数张量。 -
collections
: 可选的图形集合键列表。新的summary op被添加到这些集合中。默认为[GraphKeys.SUMMARIES]。 -
family
: 可选的;如果提供,用作摘要标记名称的前缀,它控制用于在Tensorboard上显示的选项卡名称。
返回值:
- 字符串类型的标量张量。其中包含一个摘要原buf。
可能产生的异常:
-
ValueError
: If tensor has the wrong shape or type.
9、tf.summary.tensor_summary()函数
使用序列化的张量.proto输出摘要协议缓冲区。
tf.summary.tensor_summary(
name,
tensor,
summary_description=None,
collections=None,
summary_metadata=None,
family=None,
display_name=None
)
参数:
- name: 生成的节点的名称。如果没有设置display_name,它还将作为TensorBoard中的标记名。(在这种情况下,标记名称将继承tf名称作用域。)
-
tensor
: 任何类型和形状的张量,可以序列化。 - summary_description: 对摘要序列的长描述。支持减价。
-
collections
: 可选的图形集合键列表。新的summary op被添加到这些集合中。默认为[GraphKeys.SUMMARIES]。 - abstry_metadata: 可选的SummaryMetadata proto(它描述哪些插件可能使用summary值)。
-
family
: 可选的;如果提供,则用作摘要标记的前缀,该标记控制未设置display_name时在TensorBoard上显示的名称。 - display_name: 在TensorBoard中用于命名该数据的字符串。如果没有设置此值,则使用节点名。
返回值:
- 字符串类型的标量张量。序列化的摘要协议缓冲区。
10、tf.summary.text()函数
总结了文本数据。
tf.summary.text(
name,
tensor,
collections=None
)
通过这个插件总结的文本数据将在TensorBoard的文本仪表板中可见。标准的TensorBoard文本仪表板将在字符串中呈现markdown,并将自动将1d和2d张量组织到表中。如果提供了一个二维以上的张量,则会显示一个二维子数组,并显示一条警告消息。(注意,这种行为不是text summary api的固有行为,而是默认的TensorBoard文本插件的固有行为。)
参数:
- name: 生成的节点的名称。也将作为一个系列名称在TensorBoard。
-
tensor
: 要概括的弦型张量。 -
collections
: 可选的op . graphkeys列表。要将摘要添加到其中的集合。默认为[_ops.GraphKeys.SUMMARIES]。
返回值:
- 一个TensorSummary op,它的配置使TensorBoard能够识别它包含文本数据。张量是弦的一个标量张量,它包含了张量。
可能产生的异常:
-
ValueError
: If tensor has the wrong type.