Tensorflow-使用TensorBoard实现可视化

版权声明:转载请注明 https://blog.csdn.net/weixin_39721347/article/details/89511075

TensorBoard无需额外安装,在TensorFlow安装时,TensorBoard就会被自动安装。

TensorBoard简介

TensorBoard是TensorFlow中实现可视化的工具。其使用TensorFlow程序运行过程中生成的日志文件来实现TensorFlow程序运行状态的可视化。TensorBoard和TensorFlow运行在不同的进程中。TensorBoard会自动读取最新的TensorFlow日志文件以可视化呈现程序运行的最新状态。

Tensorflow程序运行过程中会生产相应的计算图的日志文件,TensorBoard再到相应的日志文件地址下读取相应的日志文件。TensorBoard会自动进行的是最新的日志文件的获取。即在程序中去配置好TensorBoard要获取的日志文件的地址后,TensorBoard会自动地进行最新的日志文件的获取,也可以理解为自动对当前的日志文件进行更新。

可见,TensorFlow与TensorBoard之间的联系就在于TensorFlow输出的日志文件。TensorFlow将程序的运行状态写入日志文件中,TensorBoard再从日志文件所在如今中读取日志文件,获取日志文件中保存的TensorFlow程序的相关信息。因此,要想使用TensorBoard可视化TensorFlow中相应的信息时,就首先需要在TensorFlow程序下将希望读取的信息写入TensorFlow的日志文件中。

可视化

TensorFlow程序中的计算图的日志文件并非自动生成,需要在Tensorflow程序中手动生产。TensorFlow提供了多种写日志文件的API:

计算图可视化

计算图的可视化在TensorBoard的GRAPH栏中

计算图结构

writer = tf.train.SummaryWriter(“path/to/log”, tf.get_default_graph())
writer.close()

其中,tf.train.SummaryWriter()的两个参数

  • “path/to/log”:存放日志文件的路径
  • tf.get_default_graph():希望可视化的计算图

节点信息

TensorBoard除了展示TensorFlow计算图的结构,还可以展示TensorFlow计算图上每个节点的基本信息以及运行时消耗的时间和空间。

在Session下,配置运行时需要记录的信息:

run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)

并配置在运行时,记录运行信息的Proto。声明一个RunMetadata实例,也就是记录运行信息的Proto,将其传入sess.run中,表示在Session运行时,将运行的信息都记录到这个RunMetadata实例中:

run_metadata = tf.RunMetadata()

将配置好的信息在Session运行时作为参数传入,从而实现运行时,需要记录的信息以及存放所记录信息配置。即运行时,会记录run_options中设置的信息,并将这些信息保存至传入的RunMetadata实例run_metadata中。

sess.run(…, …, options=run_options, run_metadata=run_metadata)

经过sess.run之后,即运行结束之后,此时的RunMetadata类实例run_metadata中已经保存了run_options中配置的需要在运行时记录的信息,此时只需要将该RunMetadata类实例run_metadata中的信息写入日志文件中。TensorFlow中提供了针对RunMetadata类实例的接口:

writer = tf.train.SummaryWriter(…) 

writer.add_run_metadata(run_metadata, “name”)

两个参数

  • run_metadata:保存有需要写入日志文件的运行信息的RunMetadata类实例
  • “name”:保存时的名称

监控指标可视化

TensorBoard除了可以可视化计算图,还可以可视化TensorFlow程序运行过程中有助于了解程序运行状态的监控指标。TensorBoard的EVENTS、IMAGES、AUDIO、HISTOGRAMS四个栏可用来可视化其他的监控指标。

同样,要想让TensorFlow中的信息在TensorBoard上可视化,最关键的依旧是将希望得到可视化的信息写入日志文件中。

针对TensorFlow中不同元素的不同监控信息,TensorFlow同样提供了各自对应的API。

记录TensorFlow中张量Tensor元素的取值分布

tf.histogram_summary(name, var)

两个参数

  • name:在可视化结果中显示的图标名称,该名称一般与变量名一致
  • var:需要记录的张量

该函数用于记录指定张量中元素的取值分布。对于给出的图表名称和张量,tf.histogram_summary函数会生成一个Summary Protocol Buffer。该函数不能理解为功能函数,而应当理解为定义一个操作符。将其写入TensorFlow的日志文件之后,可以在TensorBoard的HISTOGRAMS栏下看到相应的图表。

需要注意的是,该函数和TensorFlow的其他操作一致,tf.histogram_summary在调用时不会被立即执行,而需要在会话中将其执行,即需要sess.run()函数明确将此操作调用,TensorFlow才会真正生成并输出Summary Protocol Buffer。

记录标量

tf.scale_summary(name, scale_value)

同样,该函数定义了一个操作符,并且只有在sess.run明确将其调用时才能生成Summary Protocol Buffer。

由于TensorFlow程序中定义的写日志操作较多,若要一个一个调用十分麻烦。因此TensorFlow提供了tf.merge_all_summaries()函数来整理所有的日志生成操作。在TensorFlow程序执行过程中只需要运行该函数就可以将代码中定义的所有日志生成操作执行一次,从而将所有信息写入日志文件中。

merged = tf.merge_all_summaries()

with tf.Session() as sess:

    summary_writer = tf.train.SummaryWriter(SUMMARY_DIR, sess.graph)
    …
    …

    summary, … = sess.run([merged, …], feed_dict={…})
    summary_writer.add_summary(summary, i)
    summary_writer.close()

猜你喜欢

转载自blog.csdn.net/weixin_39721347/article/details/89511075