TensorBoard 嵌入示例?

TensorBoard Embedding Example?

我正在寻找一个张量板嵌入示例,例如带有虹膜数据的嵌入投影仪 http://projector.tensorflow.org/

但遗憾的是我找不到。 https://www.tensorflow.org/how_tos/embedding_viz/

中有关如何操作的一些信息

有人知道此功能的基本教程吗?

基础知识:

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

embedding_var = tf.Variable(....)

2) 定期将您的嵌入保存在 LOG_DIR.

3) 将元数据与您的嵌入相关联。

听起来您想在 TensorBoard 上使用 t-SNE 运行 获取可视化部分。如您所述,Tensorflow 的 API 仅在 how-to document.

中提供了最基本的命令

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

是的,分为三个一般步骤:

  1. 为每个维度创建元数据。
  2. 将图像与每个维度相关联。
  3. 将数据加载到 TensorFlow 中并将嵌入保存在 LOG_DIR 中。

TensorFlow r0.12 版本仅包含通用详细信息。据我所知,官方源代码中没有完整的代码示例。

我发现操作方法中没有记录涉及的两个任务。

  1. 从源准备数据
  2. 正在将数据加载到 tf.Variable

虽然 TensorFlow 是为使用 GPU 而设计的,但在这种情况下,我选择使用 CPU 生成 t-SNE 可视化,因为该过程占用的内存比我的 MacBookPro GPU 可以访问的内存多。 API TensorFlow 包含对 MNIST 数据集的访问权限,因此我使用了它。 MNIST 数据以结构化 numpy 数组的形式出现。使用 tf.stack 函数可以将此数据集堆叠到可以嵌入到可视化中的张量列表中。以下代码包含我如何提取数据和设置 TensorFlow 嵌入变量。

with tf.device("/cpu:0"):
    embedding = tf.Variable(tf.stack(mnist.test.images[:FLAGS.max_steps], axis=0), trainable=False, name='embedding')

创建元数据文件是通过对 numpy 数组进行切片来执行的。

def save_metadata(file):
    with open(file, 'w') as f:
        for i in range(FLAGS.max_steps):
            c = np.nonzero(mnist.test.labels[::1])[1:][0][i]
            f.write('{}\n'.format(c))

如操作方法中所述,有一个图像文件与之关联。我已经将前 10,000 张 MNIST 图像的 png 文件上传到 my GitHub

到目前为止,TensorFlow 对我来说效果很好,它计算速度快,有据可查,API 对于我目前要做的任何事情来说似乎在功能上都是完整的。我期待在来年使用自​​定义数据集生成更多可视化效果。此 post 是根据 my blog 编辑的。祝你好运,请告诉我进展如何。 :)

查看此演讲 "Hands-on TensorBoard (TensorFlow Dev Summit 2017)" https://www.youtube.com/watch?v=eBbEDRsCmv4 它演示了在 MNIST 数据集上嵌入 TensorBoard。

可以在此处找到演讲的示例代码和幻灯片 https://github.com/mamcgrath/TensorBoard-TF-Dev-Summit-Tutorial

我用过 FastText's pre-trained word vectors 和 TensorBoard。

import os
import tensorflow as tf
import numpy as np
import fasttext
from tensorflow.contrib.tensorboard.plugins import projector

# load model
word2vec = fasttext.load_model('wiki.en.bin')

# create a list of vectors
embedding = np.empty((len(word2vec.words), word2vec.dim), dtype=np.float32)
for i, word in enumerate(word2vec.words):
    embedding[i] = word2vec[word]

# setup a TensorFlow session
tf.reset_default_graph()
sess = tf.InteractiveSession()
X = tf.Variable([0.0], name='embedding')
place = tf.placeholder(tf.float32, shape=embedding.shape)
set_x = tf.assign(X, place, validate_shape=False)
sess.run(tf.global_variables_initializer())
sess.run(set_x, feed_dict={place: embedding})

# write labels
with open('log/metadata.tsv', 'w') as f:
    for word in word2vec.words:
        f.write(word + '\n')

# create a TensorFlow summary writer
summary_writer = tf.summary.FileWriter('log', sess.graph)
config = projector.ProjectorConfig()
embedding_conf = config.embeddings.add()
embedding_conf.tensor_name = 'embedding:0'
embedding_conf.metadata_path = os.path.join('log', 'metadata.tsv')
projector.visualize_embeddings(summary_writer, config)

# save the model
saver = tf.train.Saver()
saver.save(sess, os.path.join('log', "model.ckpt"))

然后 运行 在您的终端中执行此命令:

tensorboard --logdir=log

在 GitHub 存储库的 TensorFlow 中提出了一个问题:No real code example for using the tensorboard embedding tab #6322 (mirror)。

它包含一些有趣的指示。


如果有兴趣,一些使用 TensorBoard 嵌入来显示字符和单词嵌入的代码: https://github.com/Franck-Dernoncourt/NeuroNER

示例:

仅供参考:

接受的答案对理解一般顺序非常有帮助:

  1. 为每个向量(样本)创建元数据
  2. 将图像(精灵)与每个矢量相关联
  3. 将数据加载到 TensorFlow 中并使用检查点和摘要编写器保存嵌入(注意路径在整个过程中保持一致)。

对我来说,基于 MNIST 的示例仍然过分依赖预训练数据和预生成的精灵和元数据文件。为了填补这个空白,我自己创建了一个这样的例子,并决定在这里分享给任何感兴趣的人——代码在 GitHub.

获取预训练嵌入并在张量板上可视化。

嵌入 -> 训练好的嵌入

metadata.tsv -> 元数据信息

max_size -> embedding.shape[0]

import tensorflow as tf
from tensorflow.contrib.tensorboard.plugins import projector

sess = tf.InteractiveSession()

with tf.device("/cpu:0"):
    tf_embedding = tf.Variable(embedding, trainable = False, name = "embedding")

tf.global_variables_initializer().run()
path = "tensorboard"
saver = tf.train.Saver()
writer = tf.summary.FileWriter(path, sess.graph)
config = projector.ProjectorConfig()
embed = config.embeddings.add()
embed.tensor_name = "embedding"
embed.metadata_path = "metadata.tsv"
projector.visualize_embeddings(writer, config)
saver.save(sess, path+'/model.ckpt' , global_step=max_size )

$ 张量板 --logdir="tensorboard" --port=8080

这里是 link 官方指南。

https://www.tensorflow.org/versions/r1.1/get_started/embedding_viz

它说它最后更新于 2017 年 6 月。