Visualización de datos de texto en TensorBoard

Ver en TensorFlow.org Ejecutar en Google Colab Ver fuente en GitHub Descargar cuaderno

Descripción general

Utilizando el API Resumen TensorFlow texto, puede conectarse fácilmente arbitraria de texto y verlo en TensorBoard. Esto puede ser extremadamente útil para muestrear y examinar sus datos de entrada, o para registrar metadatos de ejecución o texto generado. También puede registrar datos de diagnóstico como texto que puede ser útil en el curso del desarrollo de su modelo.

En este tutorial, probará algunos casos de uso básicos de la API de resumen de texto.

Configuración

try:
  # %tensorflow_version only exists in Colab.
  %tensorflow_version 2.x
except Exception:
  pass

# Load the TensorBoard notebook extension.
%load_ext tensorboard
import tensorflow as tf

from datetime import datetime
import json
from packaging import version
import tempfile

print("TensorFlow version: ", tf.__version__)
assert version.parse(tf.__version__).release[0] >= 2, \
    "This notebook requires TensorFlow 2.0 or above."
TensorFlow version:  2.5.0-dev20210219

Registrar una sola pieza de texto

Para comprender cómo funciona la API de resumen de texto, simplemente registrará un poco de texto y verá cómo se presenta en TensorBoard.

my_text = "Hello world! 😃"
# Clear out any prior log data.
!rm -rf logs

# Sets up a timestamped log directory.
logdir = "logs/text_basics/" + datetime.now().strftime("%Y%m%d-%H%M%S")
# Creates a file writer for the log directory.
file_writer = tf.summary.create_file_writer(logdir)

# Using the file writer, log the text.
with file_writer.as_default():
  tf.summary.text("first_text", my_text, step=0)

Ahora, use TensorBoard para examinar el texto. Espere unos segundos a que la interfaz de usuario comience a funcionar.

%tensorboard --logdir logs

Organizar múltiples flujos de texto

Si tiene varios flujos de texto, puede mantenerlos en espacios de nombres separados para ayudar a organizarlos, al igual que los escalares u otros datos.

Tenga en cuenta que si registra texto en muchos pasos, TensorBoard submuestreará los pasos para mostrar para que la presentación sea manejable. Se puede controlar la velocidad de muestreo mediante el --samples_per_plugin bandera.

# Sets up a second directory to not overwrite the first one.
logdir = "logs/multiple_texts/" + datetime.now().strftime("%Y%m%d-%H%M%S")
# Creates a file writer for the log directory.
file_writer = tf.summary.create_file_writer(logdir)

# Using the file writer, log the text.
with file_writer.as_default():
  with tf.name_scope("name_scope_1"):
    for step in range(20):
      tf.summary.text("a_stream_of_text", f"Hello from step {step}", step=step)
      tf.summary.text("another_stream_of_text", f"This can be kept separate {step}", step=step)
  with tf.name_scope("name_scope_2"):
    tf.summary.text("just_from_step_0", "This is an important announcement from step 0", step=0)
%tensorboard --logdir logs/multiple_texts --samples_per_plugin 'text=5'

Interpretación de rebajas

TensorBoard interpreta los resúmenes de texto como Markdown, ya que el formato enriquecido puede facilitar la lectura y la comprensión de los datos que registra, como se muestra a continuación. (Si no desea que la interpretación de rebajas, consulte este tema para soluciones a la interpretación de supresión).

# Sets up a third timestamped log directory under "logs"
logdir = "logs/markdown/" + datetime.now().strftime("%Y%m%d-%H%M%S")
# Creates a file writer for the log directory.
file_writer = tf.summary.create_file_writer(logdir)

some_obj_worth_noting = {
  "tfds_training_data": {
      "name": "mnist",
      "split": "train",
      "shuffle_files": "True",
  },
  "keras_optimizer": {
      "name": "Adagrad",
      "learning_rate": "0.001",
      "epsilon": 1e-07,
  },
  "hardware": "Cloud TPU",
}


# TODO: Update this example when TensorBoard is released with
# https://github.com/tensorflow/tensorboard/pull/4585
# which supports fenced codeblocks in Markdown.
def pretty_json(hp):
  json_hp = json.dumps(hp, indent=2)
  return "".join("\t" + line for line in json_hp.splitlines(True))

markdown_text = """
### Markdown Text

TensorBoard supports basic markdown syntax, including:

    preformatted code

**bold text**

| and | tables |
| ---- | ---------- |
| among | others |
"""

with file_writer.as_default():
  tf.summary.text("run_params", pretty_json(some_obj_worth_noting), step=0)
  tf.summary.text("markdown_jubiliee", markdown_text, step=0)
%tensorboard --logdir logs/markdown