Tensorboard详解(下篇)
间提壶华小厨
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记录的数据的变化趋势。如下代码所示:
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. 建立 embeddings
embedding_var = tf.Variable(batch_xs, name=”mnist_embedding”)
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项目,链接为:
上图六为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项目
其中,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文件可视化高维数据 |
Tensorboard详解(下篇)的更多相关文章
- 《招一个靠谱的移动开发》iOS面试题及详解(下篇)
iOS面试知识点 现在进入本篇的正题.本篇的面试题是我认为比较好的iOS开发基础知识点,希望大家看过这后在理解的基础上掌握而不是死记硬背.死记硬背很快也会忘记的. 1 iOS基础 1.1 父类实现深拷 ...
- Java版人脸检测详解下篇:编码
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- TensorFlow框架(2)之TensorBoard详解
为了更方便 TensorFlow 程序的理解.调试与优化,TensorFlow发布了一套叫做 TensorBoard 的可视化工具.你可以用 TensorBoard 来展现你的 TensorFlow ...
- Tensorboard 详解(上篇)
花间提壶华小厨 1. Tensorboard简介 对大部分人而言,深度神经网络就像一个黑盒子,其内部的组织.结构.以及其训练过程很难理清楚,这给深度神经网络原理的理解和工程化带来了很大的挑战.为了解决 ...
- 谈谈分布式事务之三: System.Transactions事务详解[下篇]
在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法.该方法对用于创建基于现有Transaction对 象的“依赖事务(DependentTra ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- WCF技术剖析之十七:消息(Message)详解(下篇)
原文:WCF技术剖析之十七:消息(Message)详解(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]< ...
- IPv6技术详解:基本概念、应用现状、技术实践(下篇)
本文来自微信技术架构部的原创技术分享. 1.前言 在上篇<IPv6技术详解:基本概念.应用现状.技术实践(上篇)>,我们讲解了IPV6的基本概念. 本篇将继续从以下方面展开对IPV6的讲解 ...
- “全栈2019”Java第三十章:数组详解(下篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- 作为前端,你需要懂得javascript实现继承的方法
在ES6之前,javascript不跟其他语言一样,有直接继承的方法,它需要借助于构造函数+原型对象模拟实现继承.现在我们可以利用ES6的extends方法实现继承,如果想了解更多有关ES6实现的继承 ...
- string类应用举例
* Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhello ...
- Java程序员考研失败后的面试经历,oppo、VIVO、等面经
温馨提示:有些可能会遗漏个别问题,都是最近一周的面试,有点忘了. 浪潮(一面挂) 你是网络工程的?对网络很了解? 解释一下什么是广播域 怎么划分子网 说一下CSS的几种分类器 数据库中有哪些聚集函 ...
- javascript输入用户名,在服务器中显示出了
## 第一个文件 pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Tra ...
- 《第31天:JQuery - 轮播图》
源码下载地址:链接:https://pan.baidu.com/s/16K9I... 提取码:0ua2 写这篇文章,当做是对自已这一天的一个总结.写轮播图要准备的东西:三张尺寸大小一样的图片.分为三个 ...
- npm发布包的那些事
npm发包的那些事 最近一直在研习关于node的知识,发布包虽然是最基础的一点,但由于一些地方的不注意很容易发生错误,我整理了我可能出现过的一些发布包的过程中的一些error,现在分享给大家: 正确的 ...
- 【前端】这可能是你看过最全的css居中解决方案了~
1.水平居中:行内元素解决方案 适用元素:文字,链接,及其其它inline或者inline-*类型元素(inline-block,inline-table,inline-flex) html部分代码: ...
- 关于 InnoDB 锁的超全总结
有点全的 InnoDB 锁 几个月之前,开始深入学习 MySQL .说起数据库,并发控制是其中很重要的一部分.于是,就这样开起了 MySQL 锁的学习,随着学习的深入,发现想要更好的理解锁,需要了解 ...
- 最全Redis基础知识
NoSQL概述 什么是NoSQL NoSQL不仅仅是SQL,它是Not Only SQL 的缩写,也是众多非关系型数据库的统称NoSQL和关系型数据库一样,也是用来存储数据的仓库. 为什么需要NoSQ ...
- OpenGL 实现视频编辑中的转场效果
转场介绍 转场效果是什么? 转场效果,简单来说就是两段视频之间的衔接过渡效果. 现在拍摄 vlog 的玩家越来越多,要是视频没有一两个炫酷的转场效果,都不好意思拿出来炫酷了. 那么如何在视频编辑软件中 ...