Tensorboard详解(下篇)

编辑 | 磐石

出品 | 磐创AI技术团队

【磐创AI导读】:本文接续Tensorboard详解(上篇)介绍Tensorboard和总结Tensorboard的所有功能并有代码演练。欢迎大家点击上方蓝字关注我们的公众号:磐创AI

1. Tensorflow监控指标可视化

除了GRAPHS栏目外,tensorboard还有IMAGES、AUDIO、SCALARS、HISTOGRAMS、DISTRIBUTIONS、FROJECTOR、TEXT、PR CURVES、PROFILE九个栏目,本小节将详细介绍这些子栏目各自的特点和用法。

1.1 IMAGES

图像仪表盘,可以显示通过tf.summary.image()函数来保存的png图片文件。

1. # 指定图片的数据源为输入数据x,展示的相对位置为[-1,28,28,1] 2. image_shape=tf.reshape(x, [-1, 28, 28,1]) 3. # 将input命名空间下的图片放到summary中,一次展示10张 4. tf.summary.image('input', image_shape, 10)

如上面代码,将输入数据中的png图片放到summary中,准备后面写入日志文件。运行程序,生成日志文件,然后在tensorboard的IMAGES栏目下就会出现如下图一所示的内容(实验用的是mnist数据集)。仪表盘设置为每行对应不同的标签,每列对应一个运行。图像仪表盘仅支持png图片格式,可以使用它将自定义生成的可视化图像(例如matplotlib散点图)嵌入到tensorboard中。该仪表盘始终显示每个标签的最新图像。

图一 tensorboard中的IMAGES栏目内容展开界面

1.2 AUDIO

音频仪表盘,可嵌入音频的小部件,用于播放通过tf.summary.audio()函数保存的音频。

一个音频summary要存成 的二维字符张量。其中,k为summary中记录的音频被剪辑的次数,每排张量是一对[encoded_audio, label],其中,encoded_audio 是在summary中指定其编码的二进制字符串,label是一个描述音频片段的UTF-8编码的字符串。

仪表盘设置为每行对应不同的标签,每列对应一个运行。该仪表盘始终嵌入每个标签的最新音频。

1.3 SCALARS

Tensorboard 的标量仪表盘,统计tensorflow中的标量(如:学习率、模型的总损失)随着迭代轮数的变化情况。如下图二所示,SCALARS栏目显示通过函数tf.summary.scalar()记录的数据的变化趋势。如下所示代码可添加到程序中,用于记录学习率的变化情况。

1. # 在learning_rate附近添加,用于记录learning_rate 2. tf.summary.scalar('learning_rate', learning_rate)

Scalars栏目能进行的交互操作有:

  • 点击每个图表左下角的蓝色小图标将展开图表
  • 拖动图表上的矩形区域将放大
  • 双击图表将缩小
  • 鼠标悬停在图表上会产生十字线,数据值记录在左侧的运行选择器中。

图二 tensorboard中的SCALARS栏目内容展开界面

此外,读者可通过在仪表盘左侧的输入框中,编写正则表达式来创建新文件夹,从而组织标签。

1.4 HISTOGRAMS

Tensorboard的张量仪表盘,统计tensorflow中的张量随着迭代轮数的变化情况。它用于展示通过tf.summary.histogram记录的数据的变化趋势。如下代码所示:

1. tf.summary.histogram(weights, 'weights')

上述代码将神经网络中某一层的权重weight加入到日志文件中,运行程序生成日志后,启动tensorboard就可以在HISTOGRAMS栏目下看到对应的展开图像,如下图三所示。每个图表显示数据的时间“切片”,其中每个切片是给定步骤处张量的直方图。它依据的是最古老的时间步原理,当前最近的时间步在最前面。通过将直方图模式从“偏移”更改为“叠加”,如果是透视图就将其旋转,以便每个直方图切片都呈现为一条相互重叠的线。

图三 tensorboard中的HISTOGRAMS栏目内容展开界面

1.5 DISTRIBUTIONS

Tensorboard的张量仪表盘,相较于HISTOGRAMS,用另一种直方图展示从tf.summary.histogram()函数记录的数据的规律。它显示了一些分发的高级统计信息。

如下图四所示,图表上的每条线表示数据分布的百分位数,例如,底线显示最小值随时间的变化趋势,中间的线显示中值变化的方式。从上至下看时,各行具有以下含义:[最大值,93%,84%,69%,50%,31%,16%,7%,最小值]。这些百分位数也可以看作标准偏差的正态分布:[最大值,μ+1.5σ,μ+σ,μ+0.5σ,μ,μ-0.5σ,μ-σ,μ-1.5σ,最小值],使得从内侧读到外侧的着色区域分别具有宽度[σ,2σ,3σ]。

图四 tensorboard中的DISTRIBUTIONS栏目内容展开界面

1.6 PROJECTOR

嵌入式投影仪表盘,全称Embedding Projector,是一个交互式的可视化工具,通过数据可视化来分析高维数据。例如,读者可在模型运行过程中,将高维向量输入,通过embedding projector投影到3D空间,即可查看该高维向量的形式,并执行相关的校验操作。Embedding projector的建立主要分为以下几个步骤:

1)建立embedding tensor

1. #1. 建立 embeddings 2. embedding_var = tf.Variable(batch_xs, name="mnist_embedding") 3. summary_writer = tf.summary.FileWriter(LOG_DIR)

2)建立embedding projector 并配置

1. config = projector.ProjectorConfig() 2. embedding = config.embeddings.add() 3. embedding.tensor_name = embedding_var.name 4. embedding.metadata_path = path_for_mnist_metadata #'metadata.tsv' 5. embedding.sprite.image_path = path_for_mnist_sprites #'mnistdigits.png' 6. embedding.sprite.single_image_dim.extend([28,28]) 7. projector.visualize_embeddings(summary_writer, config)

3)将高维变量保存到日志目录下的checkpoint文件中

1. sess = tf.InteractiveSession() 2. sess.run(tf.global_variables_initializer()) 3. saver = tf.train.Saver() 4. saver.save(sess, os.path.join(LOG_DIR, "model.ckpt"), 1)

4)将metadata与embedding联系起来,将 vector 转换为 images,反转灰度,创建并保存 sprite image

1. to_visualise = batch_xs 2. to_visualise = vector_to_matrix_mnist(to_visualise) 3. to_visualise = invert_grayscale(to_visualise) 4. sprite_image = create_sprite_image(to_visualise) 5. plt.imsave(path_for_mnist_sprites,sprite_image,cmap='gray')

5)运行程序,生成日志文件,启动服务,tensorboard中的PROJECTOR栏将展示投影后的数据的动态图,如下图五所示。

图五 tensorboard中的PROJECTOR栏目内容展开界面

Embedding Projector从模型运行过程中保存的checkpoint文件中读取数据,默认使用主成分分析法(PCA)将高维数据投影到3D空间中,也可以设置选择另外一种投影方法,T-SNE。除此之外,也可以使用其他元数据进行配置,如词汇文件或sprite图片。

1.7 TEXT

文本仪表盘,显示通过tf.summary.text()函数保存的文本片段,包括超链接、列表和表格在内的Markdown功能均支持。

1.8 PR CURVES

PR CURVES仪表盘显示的是随时间变化的PR曲线,其中precision为横坐标,recall为纵坐标。如下代码创建了一个用于记录PR曲线的summary。

1. # labels为输入的y, predition为预测的y值 2. # num_thresholds为多分类的类别数量 3. tensorboard.summary.pr_curve(name='foo', 4. predictions=predictions, 5. labels=labels, 6. num_thresholds=11)

图六 tensorboard中的PR CURVES栏目内容展开界面

(图片来自tensorboard官方的github项目,链接为:

https://github.com/tensorflow/tensorboard/blob/master/tensorboard/plugins/pr_curve/images/pr_curves_intro.png)

上图六为tensorboard上PR CURVES栏目在有内容时的首页,没有内容时就隐藏在INACTIVE栏目下。

训练模型时,经常需要在查准率和查全率之间权衡,PR曲线能够帮助我们找到这个权衡点。每条曲线都对应一个二分类问题,所以,针对多分类问题,每一个类都会生成一条对应的PR曲线。

1.9 PROFILE

Tensorboard的配置文件仪表盘,该仪表盘上包含了一套TPU工具,可以帮助我们了解,调试,优化tensorflow程序,使其在TPU上更好的运行。

但并不是所有人都可以使用该仪表盘,只有在Google Cloud TPU上有访问权限的人才能使用配置文件仪表盘上的工具。而且,该仪表盘与其他仪表盘一样,都需要在模型运行时捕获相关变量的跟踪信息,存入日志,方可用于展示。

在PROFILE仪表盘的首页上,显示的是程序在TPU上运行的工作负载性能,它主要分为五个部分:Performance Summary、Step-time Graph、Top 10 Tensorflow operations executed on TPU、Run Environment和Recommendation for Next Step。如下图七所示:

图七 tensorboard中的PROFILE栏目内容展开界面

(图片来自tensorboard的github项目

https://github.com/tensorflow/tensorboard/blob/master/tensorboard/plugins/profile/docs/overview-page.png)

其中,Performance Summary包括以下四项:

1)所有采样步骤的平均步长时间

2)主机空闲时间百分比

3)TPU空闲时间百分比

4)TPU矩阵单元的利用率

Run Environment(运行环境)包括以下五方面:

1)使用的主机数量

2)使用的TPU类型

3)TPU内核的数量

4)训练批次的大小(batch size)

5)作业信息(构建命令和运行命令)

2. 总结

本系列介绍了tensorflow中一个非常重要的工具——tensorboard。Tensorboard是一个可视化工具,它能够以直方图、折线图等形式展示程序运行过程中各标量、张量随迭代轮数的变化趋势,它也可以显示高维度的向量、文本、图片和音频等形式的输入数据,用于对输入数据的校验。Tensorflow函数与tensorboard栏目的对应关系如表1所示。

Tensorboard的可视化功能对于tensorflow程序的训练非常重要,使用tensorboard进行调参主要分为以下几步:

1)校验输入数据

如果输入数据的格式是图片、音频、文本的话,可以校验一下格式是否正确。如果是处理好的低维向量的话,就不需要通过tensorboard校验。

2)查看graph结构

查看各个节点之间的数据流关系是否正确,再查看各个节点所消耗的时间和空间,分析程序优化的瓶颈。

3)查看各变量的变化趋势

在SCALAR、HISTOGRAMS、DISTRIBUTIONS等栏目下查看accuracy、weights、biases等变量的变化趋势,分析模型的性能

4)修改code

根据3)和4)的分析结果,优化代码。

5)选择最优模型

6)用Embedding Projector进一步查看error出处

Tensorboard虽然只是tensorflow的一个附加工具,但熟练掌握tensorboard的使用,对每一个需要对tensorflow程序调优的人都非常重要,它可以显著提高调参工作的效率,帮助我们更快速地找到最优模型。

表1 tensorflow函数与tensorboard栏目的对照表

Tensorboard栏目

tensorflow日志生成函数

内容

GRAPHS

默认保存

显示tensorflow计算图

SCALARS

tf.summary.scalar

显示tensorflow中的张量随迭代轮数的变化趋势

DISTRIBUTIONS

tf.summary.histogram

显示tensorflow中张量的直方图

HISTOGRAMS

tf.summary.histogram

显示tensorflow中张量的直方图(以另一种方式)

IMAGES

tf.summary.image

显示tensorflow中使用的图片

AUDIO

tf.summary.audio

显示tensorflow中使用的音频

TEXT

tf.summary.text

显示tensor flow中使用的文本

PROJECTOR

通过读取checkpoint文件可视化高维数据


Tips:欢迎大家点击最下方二维码关注我们的公众号,点击干货资源专栏或发送关键字“资源”获取更多资源推荐。关注我们的历史文章,一起畅游在深度学习的世界中。

原文发布于微信公众号 - 磐创AI(xunixs)

原文发表时间:2018-05-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Django中文社区

django 博客使用 annotate 统计分类下文章数量

博客文章通常都有分类,有时候我们会看到分类名后面还跟着该分类下的文章数量。前面我们通过学习 django 博客开发入门教程搭建了一个小博客。现在想在现有的基础上...

2977
来自专栏AI研习社

手写体数字识别该如何选择GPU并实现?DeepLearning4j 实战

在之前的博客中已经用单机、Spark分布式两种训练的方式对深度神经网络进行训练,但其实DeepLearning4j也是支持多GPU训练的。 这篇文章我就总结下用...

3143
来自专栏PPV课数据科学社区

TensorFlow On Spark 开源项目分析

原文:http://sparkdata.org/?p=423&utm_source=tuicool&utm_medium=referral 作者:京东大数据技术...

7956
来自专栏人工智能头条

图解TensorFlow架构与设计

2626
来自专栏开源优测

[接口测试 - http.client篇] 14 源码初探及其工作机制分析

概述 http.client模块定义和实现了一系列类用于实现客户端HTTP和HTTPS协议。 一句话说明: HTTP/1.1 client library 注:...

2738
来自专栏PPV课数据科学社区

【工具】Apache Spark 1.5发布了!!!

Apache Spark社区刚刚发布了1.5版本,大家一定想知道这个版本的主要变化,这篇文章告诉你答案。 DataFrame执行后端优化(Tungsten第一...

2756
来自专栏人工智能LeadAI

Spark新愿景:让深度学习变得更加易于使用

01 前 言 Spark成功的实现了当年的承诺,让数据处理变得更容易,现在,雄心勃勃的Databricks公司展开了一个新的愿景:让深度学习变得更容易。 当然牛...

3505
来自专栏思考的代码世界

Python网络数据采集之图像识别与文字处理|第10天

将图像翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现 OCR 的底层库并不多,目前很多库都是使...

3758
来自专栏AI研习社

Github 项目推荐 | 在 Spark 上实现 TensorFlow 的库 —— Sparkflow

该库是 TensorFlow 在 Spark 上的实现,旨在 Spark 上使用 TensorFlow 提供一个简单的、易于理解的接口。借助 SparkFlow...

932
来自专栏开源优测

[接口测试 - http.client篇] 14 源码初探及其工作机制分析

概述 http.client模块定义和实现了一系列类用于实现客户端HTTP和HTTPS协议。 一句话说明: HTTP/1.1 client library 注:...

2604

扫码关注云+社区