Afficher des données textuelles dans TensorBoard

Voir sur TensorFlow.org Exécuter dans Google Colab Voir la source sur GitHub Télécharger le cahier

Aperçu

Utilisation de l'API texte tensorflow Résumé, vous pouvez facilement connecter arbitraire texte et l' afficher dans TensorBoard. Cela peut être extrêmement utile pour échantillonner et examiner vos données d'entrée, ou pour enregistrer des métadonnées d'exécution ou du texte généré. Vous pouvez également enregistrer les données de diagnostic sous forme de texte qui peuvent être utiles au cours du développement de votre modèle.

Dans ce didacticiel, vous allez essayer quelques cas d'utilisation de base de l'API Text Summary.

Installer

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

Enregistrer un seul morceau de texte

Pour comprendre le fonctionnement de l'API Text Summary, vous allez simplement enregistrer un peu de texte et voir comment il est présenté dans 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)

Maintenant, utilisez TensorBoard pour examiner le texte. Attendez quelques secondes que l'interface utilisateur démarre.

%tensorboard --logdir logs

Organisation de plusieurs flux de texte

Si vous avez plusieurs flux de texte, vous pouvez les conserver dans des espaces de noms séparés pour vous aider à les organiser, tout comme des scalaires ou d'autres données.

Notez que si vous enregistrez du texte à plusieurs étapes, TensorBoard sous-échantillonnera les étapes à afficher afin de rendre la présentation gérable. Vous pouvez contrôler le taux d' échantillonnage à l' aide du --samples_per_plugin drapeau.

# 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'

Interprétation des démarques

TensorBoard interprète les résumés de texte comme Markdown, car un formatage riche peut rendre les données que vous enregistrez plus faciles à lire et à comprendre, comme indiqué ci-dessous. (Si vous ne voulez pas l' interprétation Markdown, voir cette question pour des solutions de contournement à l' interprétation suppress.)

# 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