间提壶华小厨

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项目,链接为:

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文件可视化高维数据

Tensorboard详解(下篇)的更多相关文章

  1. 《招一个靠谱的移动开发》iOS面试题及详解(下篇)

    iOS面试知识点 现在进入本篇的正题.本篇的面试题是我认为比较好的iOS开发基础知识点,希望大家看过这后在理解的基础上掌握而不是死记硬背.死记硬背很快也会忘记的. 1 iOS基础 1.1 父类实现深拷 ...

  2. Java版人脸检测详解下篇:编码

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. TensorFlow框架(2)之TensorBoard详解

    为了更方便 TensorFlow 程序的理解.调试与优化,TensorFlow发布了一套叫做 TensorBoard 的可视化工具.你可以用 TensorBoard 来展现你的 TensorFlow ...

  4. Tensorboard 详解(上篇)

    花间提壶华小厨 1. Tensorboard简介 对大部分人而言,深度神经网络就像一个黑盒子,其内部的组织.结构.以及其训练过程很难理清楚,这给深度神经网络原理的理解和工程化带来了很大的挑战.为了解决 ...

  5. 谈谈分布式事务之三: System.Transactions事务详解[下篇]

    在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法.该方法对用于创建基于现有Transaction对 象的“依赖事务(DependentTra ...

  6. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  7. WCF技术剖析之十七:消息(Message)详解(下篇)

    原文:WCF技术剖析之十七:消息(Message)详解(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]< ...

  8. IPv6技术详解:基本概念、应用现状、技术实践(下篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 在上篇<IPv6技术详解:基本概念.应用现状.技术实践(上篇)>,我们讲解了IPV6的基本概念. 本篇将继续从以下方面展开对IPV6的讲解 ...

  9. “全栈2019”Java第三十章:数组详解(下篇)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. centos安装图形界面通常有两种方式

    centos安装图形界面通常有两种方式   1.通过系统安装,在配置选择软件界面,选择GNOME桌面模式.

  2. 不要写很酷但同事看不懂的Java代码

    你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员.为了提高 Java 编程的技艺,我最近在 GitHub 上学习一些高手编写的代码.下面这一行代码(出自大牛之手)据说可以征服你的朋 ...

  3. webstorm 提示 "scanning files to index..." 一直不能编译的问题

    先说一下我的操作过程吧: 下载公司的vue项目后,要用到webpack打包工具,需要按照package.json安装一些依赖,我使用了镜像后,npm install模块时候生成了一个 node_mod ...

  4. LeetCode 33.Search in Rotated Sorted Array(M)

    题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...

  5. 01 搭建EasyMock环境

    EasyMock 介绍 EasyMock是一个构建模拟数据的平台,也可以说是一个在线mockJs平台 EasyMock优势 省去配置.安装mockJs步骤,解决多人协作Mock数据不互通问题 不需要在 ...

  6. PHP中elseif与else if的区别

    在PHP中,正常情况下elseif和else if的用法及效果是一样的,但在使用带冒号的if语句时(也就是php替代)情况会有点不一样,比如: <?php  /*正确的写法*/  $a = 1; ...

  7. Alibaba Sentinel 限流与熔断初探(技巧篇)

    目录 1.Sentinel 是什么 ?主要能解决什么问题? 2.限流与熔断的使用场景 3.Sentinel 源码结构 4.在 IntelliJ IDEA 中运行 Sentine Demo 温馨提示:源 ...

  8. 【tomcat系列】配置tomcat远程访问

    当程序部署在tomcat上后,需要监测tomcat的性能和监测tomcat的各项指标,如内存使用情况,cpu使用情况,jvm实际情况等,对于这些指标的监控,tomcat提供了访问入口,然而tomcat ...

  9. HTML5&CCS3(2) 处理网页文件

    2.1 规划网站 为什么要创建这个站点,需要展示的内容是什么? 应该如何调整内容使之吸引期望的访问者? 需要多少个页面?网站的结构是怎样? 为页面.图像和其他外部文件设计一个简单且一致的命名规则. 2 ...

  10. Win10下如何安装和搭建appium自动化测试环境

    转:https://www.cnblogs.com/huainanhai/p/11577419.html 安装Android SDK https://www.jianshu.com/p/2acdc1d ...