谷歌开源 Embedding Projector 高维数据可视化

近段时间以来,机器学习领域内的进展已经催生出了很多激动人心的结果,其应用已经延展到了图像识别、语言翻译、医学诊断等许多领域。对研究科学家来说,随着机器学习系统的广泛应用,理解模型解读数据的方式正变得越来越重要。但是,探索数据的一大主要难题是数据往往具有数百个乃至数千个维度,这需要我们使用特别的工具才能研究调查清楚数据空间。

TensorBoard简介

TensorFlow
的计算过程其实是一个黑盒过程,为了便于使用者对TensorFlow程序的理解,调试和优化
,TensorFlow 提供TensorBoard
这套组件来支持对代码的可视化理解。TensorBoard
是一组Web应用组件;其主要的作用是用可视化的方式展示TensorFlow的计算过程和计算图的形态;

澳门新葡亰 1

为了实现一种更为直观的探索过程,谷歌今日布开源了一款用于交互式可视化和高维数据分析的网页工具
Embedding Projector,其作为 TensorFlow 的一部分,能带来类似 A.I.
Experiment 的效果(参阅:业界 | 谷歌推出 A.I.
Experiments:让任何人都可以轻松实验人工智能)。同时,谷歌也在
projector.tensorflow.org
放出了一个可以单独使用的版本,让用户无需安装和运行 TensorFlow
即可进行高维数据的可视化

TensorBoard可视化

TensorBoard
是通过读取TensorFlow的事件文件信息来进行可视化的。TensorFlow的事件文件包含的是tensorflow运行时的summary
data。

  • Embedding Projector 地址:

  • 可单独使用的版本:

  • 相关论文地址:

Summary Operations

Summary Operation提供了这样一些工具用来记录computational
graph的运行信息:
下面两个类提供了output 接口,用来将summary信息写到事件文件中去。

  • tf.summary.FileWriter
  • tf.summary.FileWriterCache

下面是一些Summary Operation

  • tf.summary.tensor_summary: Outputs a Summary protocol buffer with a
    serialized tensor.proto
  • tf.summary.scalar: Outputs a Summary protocol buffer containing a
    single scalar value
  • 澳门新葡亰,tf.summary.histogram: Outputs a Summary protocol buffer with a
    histogram
  • tf.summary.audio: Outputs a Summary protocol buffer with audio.
  • tf.summary.image: Outputs a Summary protocol buffer with images.
  • tf.summary.merge: This op creates a Summary protocol buffer that
    contains the union of all the values in the input summaries.
  • tf.summary.merge_all: Merges all summaries collected in the default
    graph

澳门新葡亰 2

生成summary 过程

  1. 首先创建需要进行收集summary data 的 computational
    graph,并且确定需要观察的节点。
    例如:假设在训练一个cnn去识别MNIST的数字的模型中,
    你可能需要记录learning rate,
    损失函数值的变化过程,这时你可以给输出learning
    rate的值和输出损失函数值的节点分别附加一个tf.summary.scalar操作。
  2. 合并summary Ops:
    tensorflow
    中的Operation不会做任何事情,直到有人去运行它,或者有其它的运行的Operation依赖于它的输出作为输入;而我们在第一步附加给compuatiaonal
    graph 节点上的summary operation 是一种相对于目标graph
    是外围的节点,他们并不被依赖,所以需要我们主动的去运行summary
    Operatiton;当然一个一个手动的去运行summary operation
    显然是很麻烦的,所以这一步需要用tf.summary.merge_all
    将所有的summary operation 合并成单个operation。
  3. 运行合并后的summary operation:
    运行summary operation将生成序列化的Summary protobuf object,
    之后将其传给 tf.summary.FileWriter , FileWrite 会将summary object
    写入到事件文件中去。
  4. 设置运行的频次:
    在模型的训练过程中往往都要进行多步迭代,我们可以在图每次计算一次时运行summary,
    但当次数迭代较多时这就没必要了,一般可以设置每训练多少步运行一次summary
    operation。

探索嵌入(embeddings)

launch Tensorboard

可以用下面两中方式启动tensorbord:

  • python -m tensorflow.tensorboard --logdir=path/to/log-directory
  • tensorboard --logdir=path/to/log-directory
    这里的logdir 指的是tf.summary.FileWriter
    写的事件文件的文件夹;如果logdir
    文件夹含有子文件夹,且这个子文件夹中含有不同的事件文件,Tensorboard
    也会对其进行可视话。当Tensorboard 启动好后,可以通过浏览器访问
    localhost:6006 去查看Tensorboard的可视化结果。

训练机器学习系统所需的数据一开始的形式是计算机无法直接理解的。为了将这些我们人类能够自然而然理解的东西(如:话语、声音或视频)翻译成算法能够处理的形式,我们会使用到嵌入(embeddings)——一种获取了数据的不同方面(即:维度
dimension)的数学向量表征。比如说,在一个语言嵌入中,相似的词会被映射到彼此相近的点。

TensorBoard: Embedding Visualization

前面我们介绍了tensorborad的流程和用法,这里我们介绍Tensorboard另外一个有用的功能,embedding
visuaslization,
其实质就是将高维的数据按照特定的算法映射到2维或者3维进行展示。

澳门新葡亰 3

TensorBoard 有一个内置的可是话工具叫做 Embedding
Projector,主要是为了方便交互式的展示和分析高维数据, embedding projector
会读取在模型文件中的embedings, 并且加载模型中任何2维的tensor。

Embedding Projector
默认的使用PCA将高维数据,映射到3维空间,但其也提供了t-SNE 用来做映射。

澳门新葡亰 4

创建embedding

需要这么三步来可视化embeddings:

  • 创建一个2维的tensor来记录embedding :
    embedding_var = tf.Variable(....)
  • 周期性的将模型变量保存在logdir 下面的checkpoint文件中

 saver = tf.train.Saver()
 saver.save(session, os.path.join(LOG_DIR, "model.ckpt"), step)
  • (可选)对embedding 附加元数据:
    如果你想对embedding
    的数据添加元数据(如标签,图片),你可以通过在log_dir文件夹下面保存一个projector_config.pbtxt指定元数据信息,或者通过python
    API
    例如:下面的projector_config.pbtxt为word_embedding附加一个存在logdir/metadata.tsv下的元数据:

 embeddings {
  tensor_name: 'word_embedding'
  metadata_path: '$LOG_DIR/metadata.tsv'
}

降维的方法

元数据

通常,embeddings都会有附加元数据, 元数据必须在模型的checkpoint
外面用一个单独的文件保存。 元数据文件的格式是TSV格式的文件,
即用tab键分隔的文件,并且这个文件必须带有文件头;
一个具体的文件内容的例子:

WordtFrequency
Airplanet345
Cart241
...

需要注意的一点是元文件中数据的顺序必须和embedding tenor的顺序一致;

Embedding Projector 提供了三种常用的数据降维(data dimensionality
reduction)方法,这让我们可以更轻松地实现复杂数据的可视化,这三种方法分别是
PCA、t-SNE 和自定义线性投影(custom linear projections):

图片元数据

如果你需要将图片数据附加到embeddings
上去,你需要将每个数据点代表的图片合成一张整的图片,这张图片叫做sprite
image。
生成完sprite image后,需要告诉Embedding projector 去加载文件:

  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])
  • PCA 通常可以有效地探索嵌入的内在结构,揭示出数据中最具影响力的维度。

  • t-SNE 可用于探索局部近邻值(local
    neighborhoods)和寻找聚类(cluster),可以让开发者确保一个嵌入保留了数据中的所有含义(比如在
    MNIST 数据集中,可以看到同样的数字聚类在一起)。

  • 自定义线性投影可以帮助发现数据集中有意义的「方向(direction)」,比如一个语言生成模型中一种正式的语调和随意的语调之间的区别——这让我们可以设计出更具适应性的机器学习系统。

Graph的可视化:

TensorFlow 的computation graphs 一般都会比较复杂.
对其进行可视化能帮助人们理解和调试程序。
对图进行可视化,只需运行TensorBoard命令,并且点击graph
按件就可以看到了。
这里主要讲的一点是name scoping

网站地图xml地图