tensorflow - projector - Ejemplo de incrustación TensorBoard?
tensorflow online (5)
Estoy buscando un ejemplo de inserción de tensorboard, con datos de iris, por ejemplo, como el proyector de inclusión http://projector.tensorflow.org/
Pero desafortunadamente no pude encontrar uno. Solo un poco de información sobre cómo hacerlo en https://www.tensorflow.org/how_tos/embedding_viz/
¿Alguien conoce un tutorial básico para esta funcionalidad?
Lo esencial:
1) Configure una variable (s) de tensor 2D que contenga su (s) incrustación (es).
embedding_var = tf.Variable(....)
2) Guarde periódicamente sus incrustaciones en un LOG_DIR.
3) Asocia los metadatos con tu incrustación.
La respuesta aceptada fue muy útil para comprender la secuencia general:
- Crear metadatos para cada vector (muestra)
- Asociar imágenes (sprites) con cada vector
- Cargue los datos en TensorFlow y guarde las incrustaciones utilizando el punto de control y el escritor de resumen (tenga en cuenta que las rutas son consistentes durante todo el proceso).
Para mí, el ejemplo basado en MNIST todavía se basaba demasiado en datos previamente entrenados y archivos de sprite y metadatos pregenerados. Para llenar este vacío, creé un ejemplo de este tipo y decidí compartirlo aquí para cualquier persona interesada: el código está en GitHub y el video se encuentra en YouTube.
Consulte esta charla "Hands-on TensorBoard (TensorFlow Dev Summit 2017)" https://www.youtube.com/watch?v=eBbEDRsCmv4 Demuestra la incorporación de TensorBoard en el conjunto de datos MNIST.
El código de muestra y las diapositivas para la charla se pueden encontrar aquí https://github.com/mamcgrath/TensorBoard-TF-Dev-Summit-Tutorial
Parece que quieres obtener la sección de Visualización con t-SNE ejecutándose en TensorBoard. Como ha descrito, la API de Tensorflow solo ha proporcionado los comandos básicos en el documento instructivo.
He subido mi solución de trabajo con el conjunto de datos MNIST a mi repositorio de GitHub .
Sí, se divide en tres pasos generales:
- Crea metadatos para cada dimensión.
- Asocia imágenes con cada dimensión.
- Cargue los datos en TensorFlow y guarde las incrustaciones en un LOG_DIR.
Solo los detalles genéricos están incluidos en la versión TensorFlow r0.12. No hay un ejemplo de código completo que conozca dentro del código fuente oficial.
Descubrí que había dos tareas involucradas que no estaban documentadas en el cómo.
- Preparación de los datos de la fuente
- Cargando los datos en un
tf.Variable
Aunque TensorFlow está diseñado para el uso de GPU, en esta situación opté por generar la visualización t-SNE con la CPU, ya que el proceso consumía más memoria de la que mi GPU MacBookPro tiene acceso. El acceso API al conjunto de datos MNIST se incluye con TensorFlow, así que lo usé. Los datos de MNIST vienen como una matriz numpy estructurada. El uso de la función tf.stack
permite que este conjunto de datos se apile en una lista de tensores que pueden integrarse en una visualización. El siguiente código contiene cómo extraje los datos y configuré la variable de inserción de TensorFlow.
with tf.device("/cpu:0"):
embedding = tf.Variable(tf.stack(mnist.test.images[:FLAGS.max_steps], axis=0), trainable=False, name=''embedding'')
La creación del archivo de metadatos se realizó con el corte de una matriz 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))
Tener un archivo de imagen para asociar es como se describe en el cómo hacerlo. He subido un archivo png de las primeras 10,000 imágenes de MNIST a mi GitHub .
Hasta ahora, TensorFlow funciona maravillosamente para mí, es computacionalmente rápido, bien documentado y la API parece estar funcionalmente completa para todo lo que estoy por hacer por el momento. Espero generar algunas visualizaciones más con conjuntos de datos personalizados durante el próximo año. Esta publicación fue editada desde mi blog . La mejor de las suertes para ti, por favor déjame saber cómo va. :)
Se ha planteado un problema en el repositorio de TensorFlow a GitHub: no hay un ejemplo de código real para usar la pestaña de inserción de tensorboard # 6322 ( espejo ).
Contiene algunos indicadores interesantes.
Si está interesado, algún código que use incrustaciones TensorBoard para mostrar incrustaciones de caracteres y palabras: https://github.com/Franck-Dernoncourt/NeuroNER
Ejemplo:
FYI: ¿Cómo puedo seleccionar qué punto de control ver en la pestaña de incrustaciones de TensorBoard?
He usado vectores de palabras preentregadas de FastText con 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"))
Luego ejecuta este comando en tu terminal:
tensorboard --logdir=log