深入理解dubbo工业级架构设计_【读书笔记】深入理解TensorFlow架构设计与实现原理(四)...

61fe4a982eedf05403573f4c0cba92b2.png

首先一如既往地是我们的约定环节:

  • TF/TB:TensorFlow/TensorBoard;

第6章 TB可视化工具

6.1 概述

TB Web界面的顶部菜单栏列出了7个功能面板,分别用与展示不同的可视化对象:

  1. SCALARS面板展示标量值随时间变化的关系图;
  2. IMAGES和AUDIO面板分别展示图像和音频数据;
  3. GRAPHS面板展示数据流图;
  4. DISTRIBUTIONS和HISTOGRAMS面板分别展示向量值的数据分布和统计信息;
  5. EMBEDDINGS面板用于展示降维后的高维数据;

d515e3236a2cb25b7f81af5f6750c5f9.png

1c9cf599a777f49d1e7201c349243caa.png

TensorBoard使用流程

c4207ee6debd49a3c3ddbca215553c93.png

这里使用的FileWriter实例和汇总操作(summary ops)均属于tf.summary模块,而这个模块贯穿TB的整个流程。它的主要功能是获取和输出模型相关的序列化数据,它的核心部分由一组汇总操作以及FileWriter、Summary和Event这3个类组成。

d1dc1257493a8a2ae778519252062a88.png

汇总操作(Summary Ops)主要负责获取数据流图上的张量,包括用户定义的度量指标、模型参数、音频和图像数据等。与计算操作不同,它存储的是符合TF项目组预定义数据结构的序列化数据(Protocol Buffers),后者包含的是具体的张量值。

FileWriter类负责向事件文件写入序列化数据,包括汇总数据、事件数据和数据流图等。汇总数据符合summary.proto文件定义的数据结构,表示一组将被可视化的具名数值,比如图像数据、音频数据;事件数据符合event.proto文件定义的数据结构,表示在会话中执行操作时产生的时间信息,包括时间戳、全局步数等;数据流图符合graph.proto文件定义的数据结构,表示当前会话加载的默认数据流图,包括图上所有节点和有向边、图的版本号等。

6.2 可视化数据流图

FileWriter类向时间文件写入的序列化数据之一。

6.2.1 名字作用域与抽象节点

数据流节点可以分为四类:计算节点、存储节点、数据节点和汇总节点。本节引入一个新概念——抽象节点,代表一组特定操作的集合。

513c9dbb928d5ad572c650f55649c0c9.png

6.2.2 可视化数据流图的最佳实践

可以简化为以下三个步骤:

  1. 创建数据流图;
  2. 创建FlieWriter实例;
  3. 启动TensorBoard程序;

代码参见这里。

3112646b165efd0b24867200c7b3eb9c.png

6.2.3 扩展阅读:汇总数据和事件数据

1. 汇总数据与summary.proto:

汇总数据是tf.summary.Summary类或者其内嵌类的实例。tf.summary.Summary包含3个内嵌类——Image、Audio、和Value。其中Value表示具名数值。

2. 事件数据与event.proto:

事件数据是tf.summary.Event类的实例,事件数据表示在会话中执行操作时产生的时间信息,包括时间戳、全局步数,以及oneof方式定义的具体事件信息。

6.2.4 拓展阅读:揭秘tf.summary.FileWriter工作原理

FileWriter向事件文件中写入的是事件数据,汇总数据和其他的序列化数据一定得转换为事件数据,同时支持并行地更新事件文件。

FileWriter类继承自SummaryToEventTransformer类,FileWriter实例包含event_writer成员对象,后者是EventFileWriter的实例,提供向事件文件中写入事件数据的能力。而且FileWriter支持多线程并行多线程并行更新事件文件,所以它和输入流水线一样需要多个缓存队列来提升效率。

当我们创建FileWriter实例时,它的构造方法会在logdir目录下创建一个事件文件,对于用户显式传入graph参数的情况,因为FileWriter的构造函数内部调用了基类SummaryToEventTransformer的构造方法,所以后者将会调用add_graph成员方法将序列化后的数据流图写入事件文件。

73ba8914aac0a222d4a74491654e9fe7.png

add_*方法会根据flush_secs定期将事件数据缓存队列中的数据写入事件文件,或者用户可以调用flush成员方法,手动刷新事件数据缓存队列。

6.3 可视化学习过程

6.3.1 汇总操作概述

汇总操作也是TF的操作之一(现在总共有4种操作:数据操作、运算操作、存储操作、汇总操作)。为了在会话运行过程中收集这些汇总数据,用户需要添加汇总操作,即在数据流图中添加对应的汇总节点,输出是特定的汇总数据,会带来额外的资源消耗。

6.3.2 使用tf.summary.scalar生成折线图

collections参数的默认值为GraphKeys.SUMMARIES。

257b8b16f33b5118d04b217e0ac88a65.png

6.3.3 使用tf.summary.histogram生成数据分布图

在会话中执行tf.summary.histogram操作,可以获取一条带有统计值的汇总数据。输入参数与tf.summary.scalar操作类似,分别是name、value和collections,可以用于查看学习过程中模型权重值的数据分布和统计信息。

6.3.4 使用tf.summary.image生成图像

执行tf.summary.image操作,可以获取一条带有图像的汇总数据。输入参数必须是形如[batch_size, height, width, channels]的四阶张量,表示一批图像数据。通道数可选1、3、4表示灰度、RGB和RGBA。

6.3.5 使用tf.summary.audio生成音频

在会话中执行tf.summary.audio操作,可以获取一条带有音频的汇总数据,必须是形如[batch_size, frames, channels]的三阶张量或形如[batch_size, frames]的二阶张量。

2a13f0dae6f4b36bd36a73ff6e7782ce.png

6.4 可视化高维数据

6.4.1 使用TensorBoard可视化高维数据

TB可视化高维数据的模块叫做嵌入投射议(embedding projector),打开Emeddings面板可看。它内置t-SNE(t-Distributed Stochastic Neighbor Embedding)和主成分分析(Principal Component Analysis,PCA)两种降维方法,也支持用户自定义降维算法,是集成的第三方模块,核心在于3类对象和3种文件的使用。3类对象分别是嵌入变量、嵌入变量元数据和投影配置参数。保存它们的3种文件分别是checkpoint文件、元数据文件和投影配置文件。

4436886cc01bc6dfe662f6bc0ffdc939.png
  • 嵌入变量:它是待可视化数据载体,TB要求用户使用形如 [ 嵌入数据总数,嵌入数据维度 ] 的二阶张量表示想要可视化的高维数据。
  • 嵌入变量元数据:用于描述嵌入变量中每个元素的数据特征集合。TF推荐使用TSV(Tab-Seperated Value,区别于CSV)文件格式保存嵌入变量元数据,由于变量元数据在训练过程中不会更新(思考:为什么?回答:相当于训练数据)。
  • 投影配置参数:用于指定TB可视化高维数据时所使用的嵌入变量及其元数据,以Protocol Buffer序列化格式保存的文本文件中,这些配置主要包括嵌入变量名称tensor_name、元数据文件路径metadata_path和全景图配置sprite等,投影配置文件命名为projector_config.pbtxt。

对于表示图像的嵌入变量,TB还支持为其添加对应的图像文件,TF官方包含了MNIST数据集中全部10000张手写体数字全景图,称为sprite image。总结TB可视化高维数据的流程,可以分为4步:

  1. 创建嵌入变量,并保存到checkpoint文件;
  2. 创建嵌入变量元数据,并保存到元数据(通常命名为metadata.tsv);
  3. 设置投影配置参数,保存到投影配置文件(通常命名为projector_config.pbtxt);
  4. 运行TB程序,加载上面生成的3个文件,可视化投影结果。

6.5 小结

Embedding模块在高维数据下的降维,采用PCA往往获得不了什么有价值的信息,只能粗略的观察到聚集的效果,可能需要适当的前处理。以MNIST数据集为例,使用t-SNE可以获得比PCA更好的效果。

在新版本的TF中,embedding被命名为projector,找不到embedding的小伙伴可以在右上角下来菜单下选择projector。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值