【问题标题】:How to use tensorboard Embedding Projector? [closed]如何使用 tensorboard Embedding Projector? [关闭]
【发布时间】:2017-04-12 11:01:39
【问题描述】:

如何使用 Tensorboard 中包含的嵌入投影仪?

我找不到任何文档。有一些对它的引用here,但没有关于如何使用它的分步示例/教程。

【问题讨论】:

标签: tensorboard


【解决方案1】:

据我所知,this 是关于在 TensorFlow 网站上嵌入可视化的唯一文档。虽然代码 sn-p 可能对第一次使用的用户不太有指导意义,所以这里是一个示例用法:

import os
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

LOG_DIR = 'logs'

mnist = input_data.read_data_sets('MNIST_data')
images = tf.Variable(mnist.test.images, name='images')

with tf.Session() as sess:
    saver = tf.train.Saver([images])

    sess.run(images.initializer)
    saver.save(sess, os.path.join(LOG_DIR, 'images.ckpt'))

这里首先我们创建一个 TensoFlow 变量 (images),然后使用 tf.train.Saver 保存它。执行代码后,我们可以通过发出tensorboard --logdir=logs 命令并在浏览器中打开localhost:6006 来启动TensorBoard。

然而,这种可视化并不是很有帮助,因为我们看不到每个数据点所属的不同类。为了将每个类与另一个类区分开来,应该提供一些元数据:

import os
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
from tensorflow.contrib.tensorboard.plugins import projector


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

mnist = input_data.read_data_sets('MNIST_data')
images = tf.Variable(mnist.test.images, name='images')

with open(metadata, 'w') as metadata_file:
    for row in mnist.test.labels:
        metadata_file.write('%d\n' % row)

with tf.Session() as sess:
    saver = tf.train.Saver([images])

    sess.run(images.initializer)
    saver.save(sess, os.path.join(LOG_DIR, 'images.ckpt'))

    config = projector.ProjectorConfig()
    # One can add multiple embeddings.
    embedding = config.embeddings.add()
    embedding.tensor_name = images.name
    # Link this tensor to its metadata file (e.g. labels).
    embedding.metadata_path = metadata
    # Saves a config file that TensorBoard will read during startup.
    projector.visualize_embeddings(tf.summary.FileWriter(LOG_DIR), config)

这给了我们:

【讨论】:

  • 总方差描述:26.4 % 是什么意思。有了这个值,我们可以说定义的数据特征是好是坏?
  • 变量元数据的格式是什么?是不是以标签为键,数据为值的字典?
  • embedding.metadata_path 应该是os.path.basename(metadata)
  • @Wazy,我相信你现在已经发现了,但是解释的总方差是通过从使用的特征向量中获取特征值的总和与所有特征值的总和来计算的。你想要更高的价值。较低的值意味着沿某个主轴的方差被投影到平面上,并且在较低的嵌入式可视化中不考虑。
【解决方案2】:

遗憾的是,我找不到更全面的文档。下面我收集所有相关资源:

PS:谢谢你给我点赞。现在我可以发布所有链接了。

2019 年 8 月更新

现在您可以通过 PyTorch 的 SummaryWriter 在 Colab 中轻松使用 Embedding Projector

import numpy as np
import tensorflow as tf
import tensorboard as tb
tf.io.gfile = tb.compat.tensorflow_stub.io.gfile
from torch.utils.tensorboard import SummaryWriter

vectors = np.array([[0,0,1], [0,1,0], [1,0,0], [1,1,1]])
metadata = ['001', '010', '100', '111']  # labels
writer = SummaryWriter()
writer.add_embedding(vectors, metadata)
writer.close()
%load_ext tensorboard
%tensorboard --logdir=runs

2020 年 2 月更新

%tensorboard 魔法现在再次正常工作。

【讨论】:

  • 我不知道你的库,但我想知道为什么这需要 tensorflow。当然,如果您已经嵌入了仅限客户端的解决方案,那会更好吗?
【解决方案3】:

@Ehsan
你的解释非常好。这里的关键是每个变量都必须在 saver.save(...) 调用之前初始化。

@大家
此外,张量板嵌入只是可视化保存的变量类的实例。它不关心是文字还是图像或其他任何东西。

官方文档https://www.tensorflow.org/get_started/embedding_viz并没有指出它是矩阵的方向可视化,在我看来,这引入了很多混乱。

也许您想知道将矩阵可视化是什么意思。矩阵可以解释为空间中点的集合。

如果我有一个形状为 (100, 200) 的矩阵,我可以将其解释为 100 个点的集合,其中每个点有 200 个维度。换言之,200 维空间中的 100 个点。

在 word2vec 的例子中,我们有 100 个词,每个词用一个 200 长度的向量表示。 Tensorboard embedding 只是使用 PCA 或 T-SNE 来可视化这个集合(矩阵)。

因此,您可以通过任何随机矩阵。如果您通过具有形状 (1080, 1920) 的图像,它会将该图像的每一行可视化,就好像它是一个点一样。

话虽如此,您可以通过简单地保存然后来可视化任何变量类实例的嵌入 saver = tf.train.Saver([a, _list, of, wanted, variables]) ...some code you may or may not have... saver.save(sess, os.path.join(LOG_DIR, 'filename.ckpt'))

稍后我会尝试做一个详细的教程。

【讨论】:

    【解决方案4】:

    听起来您想获得在 TensorBoard 上运行 t-SNE 的可视化部分。正如您所描述的,Tensorflow 的 API 仅在 how-to document 中提供了最基本的命令。

    我已将我的工作解决方案与 MNIST 数据集上传到 my GitHub repo

    原始 Stackoverflow 答案:TensorBoard Embedding Example?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 2021-11-13
      • 2018-11-02
      • 2021-10-03
      • 2016-10-04
      • 1970-01-01
      • 2020-03-22
      相关资源
      最近更新 更多