Связывание тензорной доски встраивание метаданных в контрольную точку


Я использую оболочку tflearn над tensorflow для построения модели и хотел бы добавить метаданные (метки) в результирующую визуализацию встраивания. Есть ли способ связать метаданные?tsv-файл в сохраненную контрольную точку после ее запуска?

Я создал projector_config.pbtxt файл в каталога журнала резюме контрольно-пропускного пункта, с метаданными.tsv находится в той же папке. Конфигурация выглядит следующим образом:

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

И был создан с использованием кода из документов - https://www.tensorflow.org/how_tos/embedding_viz/

Я прокомментировал ТФ.Часть сеанса в надежде создать ссылку метаданных без необходимости делать это непосредственно в объекте сеанса, но я не уверен, что это возможно.

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)

Ниже приведена привязка текущей визуализации встраивания. Обратите внимание на пустые метаданные. Есть ли способ напрямую присоединить нужный метафайл к этому встраиванию?

Встраивание Визуализации

3 4

3 ответа:

У меня была такая же проблема, и теперь она решена :)

По существу, все, что вам нужно сделать, это выполнить следующие 3 шага:
  1. сохранить контрольную точку модели, предположив, что каталог ckeckpoint равен ckp_dir;
  2. место projector_config.метаданные pbtxt и .tsv в ckp_dir;
  3. запустите tensorboard --logdir=ckp_dir и перейдите на вкладку вложение

Содержание projector_config.pbtxt это:

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

Это ключ для связи встраивания с метаданными.цв. В tf.Session (), мы часто получаем значение вложения, как sess.run('embedding_name:0'). Но в projector_config.pbtxt , мы просто набираем tensor_name: "embedding_name".

Как правило, мы можем указать путь к контрольной точке и metadata_path в projector_config.pbtxt , чтобы мы могли разместить контрольную точку , projector_config.метаданные pbtxt и .tsv в разных каталогах. Но я думаю, что это слишком сложно. Я просто решил ее, как описано выше.

Результат, показанный здесь

Попробуйте это с вашим projector_config.pbtxt:

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

Убедитесь, что ваш $LOGDIR является тем же путем, который вы используете для вызова tensorboard --logdir=$LOGDIR на вашем терминале; то есть он должен быть относительно вашего текущего каталога (поэтому он, вероятно, не должен включать C:/..). Также включите имя файла в metadata_path.

Дайте мне знать, если это сработает и для вас.

Я столкнулся с той же проблемой, пытаясь отобразить слова вместо индексов для учебника word2vec. Чтобы добиться этого, ваш projector_config.pbtxt должен выглядеть так: это:

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

Вы также можете изменить функцию save_vocab в коде, связанном выше, так как она преобразует unicode в hex.

У меня та же проблема. [EDIT:] я могу заставить его работать, создав поддир и поместив туда все файлы контрольных точек, используя полный путь к файлу метаданных. "Хитрость" заключается в том, что если вы даете tensorboard-logdir этот конкретный dir, он каким-то образом анализирует метаданные и отображает слова в графике, а не только индексы. Недостатком является то, что тогда вложения больше не будут найдены, когда вы просто используете базовый log dir как --logdir, поэтому вам всегда нужно начинать отдельный экземпляр tensorboard для просмотра вложений.

Это действительно очень раздражает, и я не могу представить, что это единственный способ заставить его работать, но я потратил часы, прежде чем это наконец сработало...