Как использовать тензометрический проектор для встраивания?

Где я могу найти документацию о встроенном проекторе, входящем в состав Tensorboard? Здесь есть некоторые ссылки на него, но нет пошагового примера/учебника о том, как его использовать.

Ответы

Ответ 1

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

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, выпустив tensorboard --logdir=logs и открыв localhost:6006 в браузере.

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

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)

Что дает нам:

enter image description here

Ответ 2

К сожалению, я не могу найти более полную документацию. Ниже я собираю все связанные ресурсы:

PS: Спасибо, что проголосовали за меня. Теперь я могу опубликовать все ссылки.

Обновление 2019-08

Теперь вы можете легко встраивать проектор в Colab с помощью PyTorch SummaryWriter

import numpy as np
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

Ответ 3

@Ehsan
Ваше объяснение очень хорошо. Ключевым моментом здесь является то, что каждая переменная должна быть инициализирована перед вызовом saver.save(...).

@Everyone
Кроме того, встраивание тензорной доски просто визуализирует экземпляры сохраненного класса Variable. Ему все равно, будут ли это слова, изображения или что-то еще.

Официальный документ https://www.tensorflow.org/get_started/embedding_viz не указывает, что это направление визуализации матрицы, что, на мой взгляд, внесло много путаницы.

Может быть, вам интересно, что значит визуализировать матрицу. Матрица может быть интерпретирована как набор точек в пространстве.

Если у меня есть матрица с формой (100, 200), я могу интерпретировать ее как набор из 100 точек, где каждая точка имеет 200 измерений. Другими словами, 100 точек в 200-мерном пространстве.

В случае word2vec у нас есть 100 слов, где каждое слово представлено вектором длиной 200. Внедрение Tensorboard просто использует PCA или T-SNE для визуализации этой коллекции (матрицы).

Поэтому вы можете через любые случайные матрицы. Если вы просматриваете изображение с формой (1080, 1920), оно будет визуализировать каждую строку этого изображения, как если бы это была одна точка.

Тем не менее, вы можете визуализировать вложение любых экземпляров класса Variable, просто сохранив затем 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

Похоже, вы хотите получить раздел "Визуализация" с t-SNE, запущенным на TensorBoard. Как вы описали, API Tensorflow предоставил только основные необходимые команды в документе с инструкциями.

Ive загрузило мое рабочее решение с набором данных MNIST в мое репо GitHub.

Исходный ответ Stackoverflow: пример внедрения TensorBoard?