【问题标题】:Linking Tensorboard Embedding Metadata to checkpoint将 Tensorboard 嵌入元数据链接到检查点
【发布时间】:2017-01-17 22:25:00
【问题描述】:

我在 tensorflow 上使用 tflearn 包装器来构建模型,并希望将元数据(标签)添加到生成的嵌入可视化中。有没有办法在运行后将 metadata.tsv 文件链接到保存的检查点?

我在检查点摘要的 logdir 中创建了一个projector_config.pbtxt 文件,metadata.tsv 位于同一文件夹中。配置如下所示:

embeddings {
  tensor_name: "Embedding/W"
  metadata_path: "C:/tmp/tflearn_logs/shallow_lstm/"
}

并且是使用文档中的代码创建的 - https://www.tensorflow.org/how_tos/embedding_viz/

我已注释掉 tf.Session 部分,希望无需直接在 Session 对象中创建元数据链接,但我不确定这是否可能。

from tensorflow.contrib.tensorboard.plugins import projector
#with tf.Session() as sess:
config = projector.ProjectorConfig()
# One can add multiple embeddings.
embedding = config.embeddings.add()
embedding.tensor_name = 'Embedding/W'
# Link this tensor to its metadata file (e.g. labels).
embedding.metadata_path = 'C:/tmp/tflearn_logs/shallow_lstm/'
# Saves a config file that TensorBoard will read during startup.
projector.visualize_embeddings(tf.summary.FileWriter('/tmp/tflearn_logs/shallow_lstm/'), config)

下面是当前嵌入可视化的快照。注意空的元数据。有没有办法直接将所需的元文件附加到这个嵌入?

【问题讨论】:

    标签: tensorflow metadata embedding tensorboard tflearn


    【解决方案1】:

    我也遇到了同样的问题,现在解决了:)

    基本上,您只需执行以下 3 个步骤:

    1. 保存模型检查点,假设检查点的目录是ckp_dir
    2. projector_config.pbtxtmetadata.tsv放入ckp_dir
    3. 运行 tensorboard --logdir=ckp_dir 并单击嵌入选项卡

    projector_config.pbtxt的内容是:

        embeddings {
          tensor_name: "embedding_name"
          metadata_path: "metatdata.tsv"
        }
    

    这是将嵌入链接到 metadata.tsv 的关键。在 tf.Session() 中,我们经常会得到像 sess.run('embedding_name:0') 这样的嵌入值。但在 projector_config.pbtxt 中,我们只需输入 tensor_name: "embedding_name"

    一般我们可以在projector_config.pbtxt中指定checkpoint路径和metadata_path,这样就可以放置checkpointprojector_config.pbtxt和metadata.tsv 在不同的目录中。但我认为这太复杂了。我只是按照上面的方法解决了。

    the result shown here

    【讨论】:

      【解决方案2】:

      用你的projector_config.pbtxt试试这个:

      embeddings {
        tensor_name: "Embedding/W"
        metadata_path: "$LOGDIR/metadata.tsv"
      }
      

      确保您的$LOGDIR 与您在终端上调用tensorboard --logdir=$LOGDIR 的路径相同;也就是说,它应该与您当前的目录相关(因此它可能不应该包括C:/..)。还要在metadata_path 中包含文件名。

      让我知道这是否也适合你。


      我在尝试显示单词而不是 word2vec tutorial 的索引时偶然发现了同样的问题。要实现这一点,您的 projector_config.pbtxt 应如下所示:

      embeddings {
        tensor_name: "w_in"
        metadata_path: "$LOGDIR/vocab.txt"
      }
      

      您可能还想修改上面链接代码中的 save_vocab 函数,因为它会将 unicode 转换为十六进制。

      【讨论】:

        【解决方案3】:

        我也有同样的问题。 [编辑:]我可以使它工作的方法是创建一个子目录并将所有检查点文件放在那里,使用元数据文件的完整路径。 “诀窍”是,如果你给 tensorboard --logdir 那个特定的目录,它会以某种方式解析元数据并在图中显示单词,而不仅仅是索引。不利的一面是,当您仅将基本日志目录用作 --logdir 时,将不再找到嵌入,因此您始终必须启动一个单独的 tensorboard 实例来查看嵌入。

        这真的很烦人,我无法想象这是让它工作的唯一方法,但我花了好几个小时才最终工作......

        【讨论】:

        • 您能澄清一下放置“所有检查点文件”的意思吗?我面临同样的问题 - 嵌入选项卡仅显示 0 个找到的张量...
        猜你喜欢
        • 1970-01-01
        • 2017-07-29
        • 2017-09-15
        • 2021-10-14
        • 1970-01-01
        • 2014-04-03
        • 2018-08-02
        • 1970-01-01
        • 2017-05-06
        相关资源
        最近更新 更多