文档章节

TensorBoard:嵌入可视化

片刻
 片刻
发布于 2017/06/10 23:58
字数 2159
阅读 136
收藏 0
点赞 0
评论 0

 

 

原文链接 : https://www.tensorflow.org/get_started/embedding_viz

译文链接 : http://www.apache.wiki/pages/viewpage.action?pageId=10029493

贡献者 : 片刻 ApacheCN Apache中文网

嵌入在机器学习中普遍存在,出现在推荐系统,NLP和许多其他应用程序中。实际上,在TensorFlow的上下文中,将张量(或张量片)视为空间点是很自然的,因此几乎任何TensorFlow系统自然会产生各种嵌入。

TensorBoard有一个内置的可视化器,称为嵌入式投影仪,用于交互式可视化和分析高维数据(如嵌入)。嵌入式投影机将从您的模型检查点文件读取嵌入。虽然它对于嵌入最有用,但它会加载任何2D张量,包括您的训练权重。

要了解有关嵌入和如何训练它们的更多信息,请参阅“ 矢量代表词”教程。如果您对嵌入图像感兴趣,请查看 这篇文章,了解MNIST图像的有趣可视化。另一方面,如果你对文字嵌入感兴趣, 这篇文章 给出了很好的介绍。

 

 

默认情况下,嵌入投影机使用主成分分析将高维数据投影到 三维。有关PCA的视觉说明,请参阅 这篇文章。您可以使用的另一个非常有用的投影是 t-SNE。我们稍后在本教程中谈论更多的t-SNE。

如果您正在使用嵌入式工作,则可能需要将标签/图像附加到数据点。您可以通过生成包含每个点的标签的 元数据文件,并通过使用我们的Python API配置投影机,或手动构建和保存 projector_config.pbtxt 在与检查点文件相同的目录中来实现。

 

建立

有关如何运行TensorBoard的深入信息,并确保您记录了所有必要的信息,请参阅TensorBoard:可视化学习

为了可视化您的嵌入,您需要做3件事情:

1)设置一个保存嵌入的2D张量。

embedding_var = tf.Variable(....)

2)定期将模型变量保存在检查点中 LOG_DIR

saver = tf.train.Saver()

saver.save(session, os.path.join(LOG_DIR, "model.ckpt"), step)

3)(可选)将元数据与嵌入相关联。

如果你有你的嵌入相关的任何元数据(标签,图像),你可以告诉TensorBoard它通过直接存储projector_config.pbtxt 在LOG_DIR,或使用我们的API的Python。

例如,以下projector_config.ptxt将 word_embedding张量与存储在$LOG_DIR/metadata.tsv以下内容中的元数据相关联:

embeddings {

  tensor_name: 'word_embedding'

  metadata_path: '$LOG_DIR/metadata.tsv'

}

可以使用以下代码段以编程方式生成相同的配置:

from tensorflow.contrib.tensorboard.plugins import projector

 

# Create randomly initialized embedding weights which will be trained.

= 10000 # Number of items (vocab size).

= 200 # Dimensionality of the embedding.

embedding_var = tf.Variable(tf.random_normal([N,D]), name='word_embedding')

 

# Format: tensorflow/contrib/tensorboard/plugins/projector/projector_config.proto

config = projector.ProjectorConfig()

 

# You can add multiple embeddings. Here we add only one.

embedding = config.embeddings.add()

embedding.tensor_name = embedding_var.name

# Link this tensor to its metadata file (e.g. labels).

embedding.metadata_path = os.path.join(LOG_DIR, 'metadata.tsv')

 

# Use the same LOG_DIR where you stored your checkpoint.

summary_writer = tf.summary.FileWriter(LOG_DIR)

 

# The next line writes a projector_config.pbtxt in the LOG_DIR. TensorBoard will

# read this file during startup.

projector.visualize_embeddings(summary_writer, config)

运行模型并训练您的嵌入后,运行TensorBoard并将其指向LOG_DIR作业。

tensorboard --logdir=LOG_DIR

然后单击顶部窗格上的“ 嵌入 ”选项卡,并选择适当的运行(如果有多个运行)。

 

元数据

通常嵌入具有与之相关联的元数据(例如标签,图像)。元数据应存储在模型检查点之外的单独文件中,因为元数据不是模型的可训练参数。格式应为TSV文件 (标签字符以红色显示),第一行包含列标题(以粗体显示),后续行包含元数据值:

Word\tFrequency

Airplane\t345

Car\t241

...

没有明确的密钥与主数据文件共享; 相反,假定元数据文件中的顺序与嵌入张量中的顺序相匹配。换句话说,第一行是标题信息,并且元数据文件中的第(i + 1)行对应于存储在检查点中的嵌入张量的第i行。

注意:如果TSV元数据文件只有一列,那么我们不期望一个标题行,并假设每一行都是嵌入的标签。我们包含这个异常,因为它与常用的“vocab文件”格式相匹配。

图片

如果您有与嵌入相关联的图像,则需要生成包含每个数据点的小缩略图的单个图像。这被称为 精灵图像。精灵应该具有相同数量的行和列,缩略图按行先顺序存储:第一个数据点放置在左上角,最后一个数据点在右下方:

0 1 2
3 4
6 7  

在上面的示例中注意到,最后一行不必被填充。有关sprite的具体示例,请参阅 10,000个MNIST数字(100x100)的精灵图像

注意:我们目前支持高达8192px X 8192px的精灵。

构建精灵后,您需要告诉嵌入投影机在哪里找到它:

embedding.sprite.image_path = PATH_TO_SPRITE_IMAGE

# Specify the width and height of a single thumbnail.

embedding.sprite.single_image_dim.extend([w, h])

相互作用

嵌入式投影机有三个面板:

  1.  顶部左侧的数据面板,您可以在其中选择运行,嵌入张量和数据列进行颜色标注。
  2. 投影面板在左下角,您可以在其中选择投影类型(例如PCA,t-SNE)。
  3. 右侧的检查员面板,您可以在其中搜索特定点,并查看最近邻居列表。

预测

嵌入式投影机具有降低数据集维数的三种方法:两个线性和一个非线性。每种方法都可用于创建二维或三维视图。

主成分分析减少尺寸的简单技术主要成分分析(PCA)。嵌入式投影机计算前10个主要组件。该菜单允许您将这些组件投影到两个或三个任意组合。PCA是线性投影,通常在检查全局几何时有效。

t-SNE流行的非线性降维技术是t-SNE。嵌入式投影仪提供二维和三维t-SNE视图。客户端对布局进行动画处理。因为t-SNE通常保留一些局部结构,因此对于探索当地社区和查找群集是有用的。虽然对于高维数据的可视化非常有用,但t-SNE图有时可能是神秘的或误导的。看到这篇伟大的文章,如何有效地使用t-SNE。

自定义您还可以根据文本搜索构建专门的线性投影,以便在空间中找到有意义的方向。要定义投影轴,请输入两个搜索字符串或正则表达式。该程序计算标签与这些搜索匹配的点集合的质心,并使用质心之间的差向量作为投影轴。

导航

要浏览数据集,您可以使用2D或3D模式浏览视图,使用自然的点击和拖动手势进行缩放,旋转和平移。单击一个点将导致右窗格显示最近邻居的显式文本列表以及当前点的距离。最近邻点自身在投影上突出显示。

缩放到集群中提供了一些信息,但是有时更有用的是将视图限制到一个点的一个子集,并仅在这些点上执行投影。为此,您可以通过多种方式选择点数:

  1. 点击一个点后,也会选择最近的邻居。
  2. 搜索后,选择与查询匹配的点。
  3. 启用选择,点击一个点和拖动来定义一个选择球体。

选择一组点后,您可以使用右侧的“检查器”窗格中的“隔离点”按钮隔离这些点,以进一步分析。

  选择一个词嵌入数据集中最重要的邻居。

过滤与自定义投影的组合可以是强大的。在下面,我们过滤了100个最近邻居的“政治”,并把它们投射到“最佳” - “最差”向量作为x轴。y轴是随机的。

你可以看到,在右边我们有“想法”,“科学”,“视角”,“新闻”,而在左边我们有“危机”,“暴力”和“冲突”。

自定义投影控件。 将“政治”的邻居定制为"best" - "worst"向量。

协作功能

要分享您的发现,您可以使用右下角的书签面板将当前状态(包括任何投影的计算坐标)保存为小文件。然后可以将投影机指向一组一个或多个这些文件,生成下面的面板。然后,其他用户可以浏览一系列书签。

© 著作权归作者所有

共有 人打赏支持
片刻
粉丝 93
博文 268
码字总数 306559
作品 0
海淀
高级程序员
TensorBoard可视化结构管理工具在Windows下的使用

遵循:BY-SA 署名-相同方式共享 4.0协议 作者:谭东 时间:2017年6月10日 环境:Windows 7 TensorBoard是TensorFlow自带的可视化结构管理和调试优化网络的工具。在我们学习深度学习网络框架时...

jay100500
2017/06/10
0
0
TensorFlow——可视化工具TensorBoard的使用

1、TensorBoard简介 Tensorboard是Tensorflow官方推出了可视化工具,它可以通过TensorFlow程序运行过程中输出的日志文件可视化TensorFlow程序的运行状态。 TensorBoard 和 TensorFLow 程序跑...

飞天小橘子
05/05
0
0
RNN实战:股票预测 2

在第2部分的教程中,将继续探讨股票预测的话题,在第一部分我增添了一个循环神经网络(RNN),并赋予它应对多个股票价格预测的能力。为了区分与不同价格序列相关联的模式,我用股票符号嵌入向...

阿里云云栖社区
2017/12/19
0
0
使用RNN预测股票价格系列二

在前文教程中,我们想继续有关股票价格预测的主题,并赋予在系列1中建立的具有对多个股票做出响应能力的RNN。 为了区分不同价格序列之间相关的模式,我们使用股票信号嵌入向量作为输入的一部...

readilen
2017/11/08
0
0
教程 | 用数据玩点花样!如何构建skim-gram模型来训练和可视化词向量

本文介绍了如何在 TensorFlow 中实现 skim-gram 模型,并用 TensorBoard 进行可视化。 GitHub 地址:https://github.com/priya-dwivedi/Deep-Learning/blob/master/word2vec_skipgram/Skip-G......

机器之心
01/13
0
0
RNN实战:股票预测 part 2

完整的工作代码可在github.com/lilianweng/stock-rnn找到。 在第2部分的教程中,将继续探讨股票预测的话题,在第一部分我增添了一个循环神经网络(RNN),并赋予它应对多个股票价格预测的能力...

【方向】
2017/12/18
0
0
window下启动tensorboard

tensorboard是TensorFlow的一个可视化工具,能够监控TensorFlow运行过程中的计算图,各种指标随着时间的变化趋势以及训练中使用到的图像等信息。 先贴个总结:首先,必须在终端启动tensorboa...

Flying_sfeng
2017/04/10
0
0
斯坦福tensorflow教程(二) tensorflow相关运算

1.认识下TensorBoard TensorFlow不仅是一个软件库,而是一整套包括TensorFlow、TensorBoard、Tensor Serving在内的软件包。为了更大程度地利用TensorFlow,我们应该了解如何将它们串联起来应...

致Great
05/09
0
0
阿里云学生服务器搭建TensorFlow&Tensorboard使用&jupyter notebook配置

TensorFlow 本文内容是如何在阿里云学生服务器下搭建TensorFlow OS Ubuntu 16.04 64位 python 3.5 1.更新软件源 2.安装Python 3.5 输入python命令查看当前默认python版本 Python 3.5 3.安装T...

SpiffyEight77
2017/11/17
0
0
TensorBoard入门

前言 TensorFlow是以流动的张量为名的神经网络开发库,所以Google为了让人们更直观的了解流动的张量的含义,他们做了个TensorBoard让我们直观的看到我们写的框架是怎么个流动法的(纯属YY)。...

Jcme丶Ls
2017/01/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

百度云iOS架构师在职场中的忠告

1.工具不能代替思考 在我多年的咨询工作和与许多组织和管理者的共事中,我发现了修复问题的共同套路,那就是管理人员相信工具可以“解决”给出的问题。当问题域被理解透彻,并且不可能有很多...

_小迷糊
20分钟前
0
0
Java基础——异常

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 异常处理: 可以挖很多个陷阱,但是不要都是一样...

凯哥学堂
33分钟前
0
0
180723-Quick-Task 动态脚本支持框架之结构设计篇

文章链接:https://liuyueyi.github.io/hexblog/2018/07/23/180723-Quick-Task-动态脚本支持框架之结构设计篇/ Quick-Task 动态脚本支持框架之结构设计篇 相关博文: 180702-QuickTask动态脚本...

小灰灰Blog
36分钟前
0
0
SBT 常用开发技巧

SBT 一直以来都是 Scala 开发者不可言说的痛,最主要的原因就是官方文档维护质量较差,没有经过系统的、循序渐进式的整理,导致初学者入门门槛较高。虽然也有其它构建工具可以选择(例如 Mill...

joymufeng
41分钟前
0
0
HBase in Practice - 性能、监控及问题解决

李钰(社区ID:Yu Li),阿里巴巴计算平台事业部高级技术专家,HBase开源社区PMC&committer。开源技术爱好者,主要关注分布式系统设计、大数据基础平台建设等领域。连续4年基于HBase/HDFS设计和...

中国HBase技术社区
42分钟前
1
0
ES18-JAVA API 批量操作

1.批量查询 Multi Get API public static void multiGet() {// 批量查询MultiGetResponse response = getClient().prepareMultiGet().add("my_person", "my_index", "1")// 查......

贾峰uk
46分钟前
0
0
SpringBoot2.0使用health

1,引入actuator <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency> 2,application.properties ......

暗中观察
53分钟前
0
0
阿里巴巴Java开发规约

###编程规约 命名风格 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。...

简心
58分钟前
0
0
如何用TypeScript来创建一个简单的Web应用

转载地址 如何用TypeScript来创建一个简单的Web应用 安装TypeScript 获取TypeScript工具的方式: 通过npm(Node.js包管理器) npm install -g typescript 构建你的第一个TypeScript文件 创建...

durban
今天
0
0
分享好友,朋友圈自定义分享链接无效

这个问题是微信6.5.6版本以后,修改了分享规则:分享的连接必须在公众号后台设定的js安全域名内

LM_Mike
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部