TensorBoard-Tutorial: Visualisierung von TensorFlow-Graphen

⚡ Intelligente Zusammenfassung

TensorBoard ist die visuelle Benutzeroberfläche für TensorFlow-Trainingsläufe und visualisiert Verlustkurven, Modellgraphen, Gewichtshistogramme und Einbettungen. In dieser Anleitung werden Ereignisdateien mithilfe eines Schätzers geschrieben und anschließend das Dashboard auf Port 6006 geöffnet.

  • 🔘 Fünf Dashboards: Skalare, Graphen, Verteilungen, Histogramme und Projektoren lesen jeweils einen anderen Zusammenfassungstyp.
  • ☑️ Protokollverzeichnis: Das Argument model_dir legt fest, wo TensorFlow die Dateien events.out.tfevents speichert.
  • ✅ Startbefehl: Führen Sie tensorboard –logdir=PATH aus und öffnen Sie anschließend http://localhost:6006 in einem beliebigen Browser.
  • 🧪 Lernrate: Eine zackige Verlustkurve signalisiert eine zu hohe Verlustrate, als dass das Modell konvergieren könnte.
  • ️ TensorFlow 2: Der Keras TensorBoard-Callback ersetzt die im ursprünglichen Beispiel gezeigte Estimator-Protokollierung.
  • ⚠️ Fehlerbehebung: Ein leeres Dashboard bedeutet fast immer, dass der Pfad zum Protokollverzeichnis nicht mit dem Trainingslauf übereinstimmt.

TensorBoard-Tutorial: Visualisierung von TensorFlow-Graphen

Was ist TensorBoard?

TensorBoard ist die Benutzeroberfläche zur Visualisierung des Graphen und weiterer Werkzeuge zum Verständnis, zur Fehlersuche und zur Optimierung des Modells. Es ist ein Werkzeug, das Messungen und Visualisierungen für einen Machine-Learning-Workflow bereitstellt. tracMithilfe von k Metriken wie Verlust und Genauigkeit visualisieren sie den Modellgraphen und projizieren Einbettungen in niedrigdimensionale Räume.

TensorBoard wird ausgeliefert mit TensorFlow und läuft als kleiner lokaler Webserver, der die Ereignisdateien liest, die ein Trainingsjob auf die Festplatte schreibt.

TensorFlow-Graphvisualisierung mit TensorBoard – Beispiel

Das untenstehende Bild stammt aus dem TensorBoard-Graphen, den Sie in diesem Tutorial erstellen werden. Es handelt sich um das Hauptfenster:

Das TensorBoard Scalars-Dashboard zeigt die durchschnittliche Verlustkurve des trainierten DNN-Regressors an.

Auf dem Bild unten sehen Sie das Panel der TensorBoard-Grafikvisualisierung. Das Bedienfeld enthält verschiedene Registerkarten, die mit der Informationsebene verknüpft sind, die Sie beim Ausführen des Modells hinzufügen.

Navigationsleiste von TensorBoard mit den Registerkarten Skalare, Graphen, Verteilungen, Histogramme und Projektor

  • Skalare: Zeigen Sie während des Modelltrainings verschiedene nützliche Informationen an.
  • Diagramme: Zeig das Modell
  • Histogramm: Gewichte mit einem Histogramm anzeigen
  • Vertrieb: Zeigen Sie die Gewichtsverteilung an
  • Beamer: Zeigen Sie die Hauptkomponentenanalyse und den T-SNE-Algorithmus. Die Technik wird zur Dimensionsreduktion verwendet.

In diesem TensorBoard-Tutorial trainieren Sie ein einfaches Modell. tiefe Lernen Das Modell und der daraus resultierende Graph werden von unten nach oben gelesen.

Anhand der Grafik lässt sich die Funktionsweise des Modells nachvollziehen. Die nummerierten Symbole im folgenden Screenshot markieren diese vier Phasen:

  1. Stellen Sie die Daten in die Warteschlange des Modells: Übertragen Sie eine Datenmenge, die der Stapelgröße entspricht, in das Modell, d. h. die Anzahl der Datenfeeds nach jeder Iteration
  2. Geben Sie die Daten an die Tensoren weiter
  3. Trainiere das Modell
  4. Zeigen Sie die Anzahl der Chargen während des Trainings an. Speichern Sie das Modell auf der Festplatte.

TensorFlow-Graph in TensorBoard mit nummerierten Knoten für die Eingabewarteschlange, den DNN-Block und die Speicheroperation

Die Grundidee von TensorBoard ist, dass sich ein neuronales Netzwerk wie eine Blackbox verhalten kann und man ein Werkzeug benötigt, um dessen Inneres zu untersuchen. Man kann sich TensorBoard wie eine Taschenlampe vorstellen, mit der man tief in das Netzwerk eintauchen kann.

Es hilft, die Abhängigkeiten zwischen Operationen zu verstehen, wie die Gewichte berechnet werden, zeigt die Verlustfunktion und viele andere nützliche Informationen an. Wenn Sie all diese Informationen zusammenführen, haben Sie ein großartiges Tool zum Debuggen und Finden von Möglichkeiten zur Verbesserung des Modells.

Um Ihnen eine Vorstellung davon zu geben, wie nützlich der TensorBoard-Graph sein kann, sehen Sie sich die beiden folgenden Verlustkurven an:

Zwei TensorBoard-Verlustkurven nebeneinander, die ein nicht lernendes Modell mit einem konvergierenden Modell vergleichen.

Ein neuronales Netzwerk entscheidet, wie die verschiedenen Neuronen miteinander verbunden werden und wie viele Schichten benötigt werden, damit das Modell ein Ergebnis vorhersagen kann. Sobald die Architektur definiert ist, muss nicht nur das Modell trainiert werden, sondern auch eine Metrik zur Messung der Vorhersagegenauigkeit festgelegt werden. Diese Metrik wird Verlustfunktion genannt, und das Ziel ist es, sie zu minimieren, was bedeutet, dass das Modell möglichst wenige Fehler macht.

Jeder Trainingsalgorithmus wiederholt die Berechnung so lange, bis der Verlust einen flacheren Verlauf erreicht. Die Minimierung des Verlusts erfordert zudem eine Lernrate, also die Geschwindigkeit, mit der das Modell lernt. Ist die Lernrate zu hoch, hat das Modell keine Zeit zu lernen: Dies zeigt sich im linken Diagramm, wo die Linie auf und ab schwankt, da das Modell quasi rät. Das rechte Diagramm zeigt, wie der Verlust mit den Iterationen abnimmt, bis die Kurve abflacht, was bedeutet, dass das Modell eine Lösung gefunden hat.

TensorBoard ist ein hervorragendes Werkzeug, um solche Metriken zu visualisieren und potenzielle Probleme aufzuzeigen. Ein neuronales Netzwerk kann Stunden oder Wochen benötigen, um eine Lösung zu finden, und TensorBoard aktualisiert die Metriken, während der Prozess noch läuft. Sie müssen daher nicht bis zum Ende warten, um zu sehen, ob das Modell korrekt trainiert wird: Öffnen Sie TensorBoard, überprüfen Sie den Trainingsfortschritt und nehmen Sie gegebenenfalls die entsprechenden Anpassungen vor.

Wie benutzt man TensorBoard?

In diesem Abschnitt erfahren Sie, wie Sie TensorBoard über das Terminal öffnen. macOS und von der Kommandozeile aus WindowsHier liegt der Fokus auf dem Werkzeug und nicht auf dem Modell, daher ist der Trainingscode bewusst kurz gehalten.

Zuerst müssen Sie die Bibliotheken importieren, die Sie während des Trainings verwenden werden.

## Import the library
import tensorflow as tf
import numpy as np

Sie erstellen die Daten. Es handelt sich um ein Array mit 10000 Zeilen und 5 Spalten.

X_train = (np.random.sample((10000,5)))
y_train =  (np.random.sample((10000,1)))
X_train.shape

Ausgang

(10000, 5)

Der unten stehende Code transformiert die Daten und erstellt das Modell.

Beachten Sie, dass die Lernrate 0.1 beträgt. Wenn Sie diesen Wert erhöhen, findet das Modell keine Lösung. Genau das ist auf der linken Seite des obigen Bildes passiert.

Das Beispiel verwendet einen TensorFlow-Estimator, die High-Level-API, die die mathematischen Berechnungen kapselt. Estimators gehören zur TensorFlow 1.x API, daher laufen die beiden folgenden Code-Snippets unter einer 1.x-Installation oder über die tf.compat.v1 Namespace.

Um die Protokolldateien zu erstellen, müssen Sie den Pfad angeben. Dies geschieht mit dem Argument model_dir.

Im folgenden TensorBoard-Beispiel speichern Sie das Modell im Arbeitsverzeichnis, also dort, wo Sie das Notebook speichern. Python Datei. Innerhalb dieses Pfades erstellt TensorFlow einen Ordner namens train mit einem Unterordner namens linreg.

feature_columns = [
      tf.feature_column.numeric_column('x', shape=X_train.shape[1:])]
DNN_reg = tf.estimator.DNNRegressor(feature_columns=feature_columns,
# Indicate where to store the log file    
     model_dir='train/linreg',    
     hidden_units=[500, 300],    
     optimizer=tf.train.ProximalAdagradOptimizer(      
          learning_rate=0.1,      
          l1_regularization_strength=0.001    
      )
)

Ausgang

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {&#x27;_model_dir': 'train/linreg', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1818e63828>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Der letzte Schritt dieses TensorFlow-Beispiels zur Visualisierung von Graphen besteht im Trainieren des Modells. Während des Trainings schreibt TensorFlow Informationen in das Modellverzeichnis.

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(    
     x={"x": X_train},    
     y=y_train, shuffle=False,num_epochs=None)
DNN_reg.train(train_input,steps=3000)

Ausgang

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into train/linreg/model.ckpt.
INFO:tensorflow:loss = 40.060104, step = 1
INFO:tensorflow:global_step/sec: 197.061
INFO:tensorflow:loss = 10.62989, step = 101 (0.508 sec)
INFO:tensorflow:global_step/sec: 172.487
INFO:tensorflow:loss = 11.255318, step = 201 (0.584 sec)
INFO:tensorflow:global_step/sec: 193.295
INFO:tensorflow:loss = 10.604872, step = 301 (0.513 sec)
INFO:tensorflow:global_step/sec: 175.378
INFO:tensorflow:loss = 10.090343, step = 401 (0.572 sec)
INFO:tensorflow:global_step/sec: 209.737
INFO:tensorflow:loss = 10.057928, step = 501 (0.476 sec)
INFO:tensorflow:global_step/sec: 171.646
INFO:tensorflow:loss = 10.460144, step = 601 (0.583 sec)
INFO:tensorflow:global_step/sec: 192.269
INFO:tensorflow:loss = 10.529617, step = 701 (0.519 sec)
INFO:tensorflow:global_step/sec: 198.264
INFO:tensorflow:loss = 9.100082, step = 801 (0.504 sec)
INFO:tensorflow:global_step/sec: 226.842
INFO:tensorflow:loss = 10.485607, step = 901 (0.441 sec)
INFO:tensorflow:global_step/sec: 152.929
INFO:tensorflow:loss = 10.052481, step = 1001 (0.655 sec)
INFO:tensorflow:global_step/sec: 166.745
INFO:tensorflow:loss = 11.320213, step = 1101 (0.600 sec)
INFO:tensorflow:global_step/sec: 161.854
INFO:tensorflow:loss = 9.603306, step = 1201 (0.619 sec)
INFO:tensorflow:global_step/sec: 179.074
INFO:tensorflow:loss = 11.110269, step = 1301 (0.556 sec)
INFO:tensorflow:global_step/sec: 202.776
INFO:tensorflow:loss = 11.929443, step = 1401 (0.494 sec)
INFO:tensorflow:global_step/sec: 144.161
INFO:tensorflow:loss = 11.951693, step = 1501 (0.694 sec)
INFO:tensorflow:global_step/sec: 154.144
INFO:tensorflow:loss = 8.620987, step = 1601 (0.649 sec)
INFO:tensorflow:global_step/sec: 151.094
INFO:tensorflow:loss = 10.666125, step = 1701 (0.663 sec)
INFO:tensorflow:global_step/sec: 193.644
INFO:tensorflow:loss = 11.0349865, step = 1801 (0.516 sec)
INFO:tensorflow:global_step/sec: 189.707
INFO:tensorflow:loss = 9.860596, step = 1901 (0.526 sec)
INFO:tensorflow:global_step/sec: 176.423
INFO:tensorflow:loss = 10.695, step = 2001 (0.567 sec)
INFO:tensorflow:global_step/sec: 213.066
INFO:tensorflow:loss = 10.426752, step = 2101 (0.471 sec)
INFO:tensorflow:global_step/sec: 220.975
INFO:tensorflow:loss = 10.594796, step = 2201 (0.452 sec)
INFO:tensorflow:global_step/sec: 219.289
INFO:tensorflow:loss = 10.4212265, step = 2301 (0.456 sec)
INFO:tensorflow:global_step/sec: 215.123
INFO:tensorflow:loss = 9.668612, step = 2401 (0.465 sec)
INFO:tensorflow:global_step/sec: 175.65
INFO:tensorflow:loss = 10.009649, step = 2501 (0.569 sec)
INFO:tensorflow:global_step/sec: 206.962
INFO:tensorflow:loss = 10.477722, step = 2601 (0.483 sec)
INFO:tensorflow:global_step/sec: 229.627
INFO:tensorflow:loss = 9.877638, step = 2701 (0.435 sec)
INFO:tensorflow:global_step/sec: 195.792
INFO:tensorflow:loss = 10.274586, step = 2801 (0.512 sec)
INFO:tensorflow:global_step/sec: 176.803
INFO:tensorflow:loss = 10.061047, step = 2901 (0.566 sec)
INFO:tensorflow:Saving checkpoints for 3000 into train/linreg/model.ckpt.
INFO:tensorflow:Loss for final step: 10.73032.

<tensorflow.python.estimator.canned.dnn.DNNRegressor at 0x1818e63630>

Bei TensorFlow 2 übernimmt die Keras TensorBoard-Callback-Funktion diese Aufgabe und schreibt den Graphen und die Metriken pro Epoche ohne jeglichen Schätzcode:

logdir = "logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model.fit(train_images, train_labels, epochs=5,
          callbacks=[tensorboard_callback])

Sobald der Lauf abgeschlossen ist, enthält das Protokollverzeichnis eine Prüfpunktdatei. graph.pbtxt Datei und eine oder mehrere events.out.tfevents Dateien – genau das, was TensorBoard liest.

Für macOS Nutzer

Die untenstehende Finder-Ansicht zeigt den neu erstellten Ordner train/linreg im Arbeitsverzeichnis.

macOS Dateiliste mit den Protokollordnern „train“ und „linreg“ inklusive Checkpoint-, Ereignis- und graph.pbtxt-Dateien

Für Windows Nutzer

On Windows Die gleichen Dateien erscheinen unter dem Pfad, den Sie an model_dir übergeben haben, wie in der Adressleiste hervorgehoben.

Windows Explorer-Ansicht des Train-Line-Reg-Ordners, der TensorFlow-Ereignis- und Checkpoint-Dateien enthält

Das gleiche Ereignisdateiformat wird erzeugt von PyTorchDas Dashboard ist also nicht auf TensorFlow-Läufe beschränkt.

Nachdem die Log-Ereignisse nun geschrieben wurden, können Sie TensorBoard öffnen. TensorBoard läuft standardmäßig auf Port 6006 (Jupyter (verwendet Port 8888). Verwenden Sie das Terminal auf macOS oder die Anaconda-Eingabeaufforderung auf Windows.

Für macOS Nutzer

# Different for you
cd /Users/Guru99/tuto_TF
source activate hello-tf!

Das Notebook ist im Pfad /Users/ gespeichert.Guru99/tuto_TF

Für Windows Nutzer

cd C:\Users\Admin\Anaconda3
activate hello-tf

Das Notizbuch wird im Pfad C:\Users\Admin\Anaconda3 gespeichert

Um TensorBoard zu starten, führen Sie folgenden Befehl in diesem Verzeichnis aus.

Für macOS Nutzer

tensorboard --logdir=./train/linreg

Für Windows Nutzer

tensorboard --logdir=.\train\linreg

TensorBoard wird dann unter http://localhost:6006 bereitgestellt.

Flagge Was es steuert
--logdir Verzeichnis, das die Ereignisdateien enthält. Dies ist die einzige erforderliche Option.
--port Port, auf dem der Dienst ausgeführt werden soll. Standardmäßig wird Port 6006 verwendet; ändern Sie ihn, falls eine frühere Sitzung diesen Port noch belegt.
--bind_all Auf jeder Netzwerkschnittstelle bereitstellen. TensorBoard bindet standardmäßig nur an localhost, daher ist für den Fernzugriff dieses Flag erforderlich, und es kann nicht mit anderen kombiniert werden. --host.
--reload_interval Wie oft (in Sekunden) das Protokollverzeichnis nach neuen Daten durchsucht wird.
--logdir_spec Legacy-Fallback, der mehrere durch Kommas getrennte Pfade akzeptiert; --logdir Diese Form wird nicht mehr unterstützt.

Das tensorboard dev Der Unterbefehl funktioniert nicht mehr: Der gehostete Dienst TensorBoard.dev wurde am 1. Januar 2024 eingestellt. Die lokale Nutzung ist davon nicht betroffen.

Auf manchen Rechnern wird in der Konsole der Hostname anstelle von localhost angezeigt, wie in der Anaconda-Eingabeaufforderung unten. Beide Adressen öffnen dasselbe Dashboard.

Anaconda-Eingabeaufforderung, die den TensorBoard-Befehl ausführt und die Serveradresse auf Port 6006 ausgibt.

Kopieren Sie die Adresse und fügen Sie sie in Ihren bevorzugten Browser ein. Anschließend sollte das Scalars-Dashboard wie unten dargestellt angezeigt werden.

Das TensorBoard Scalars-Dashboard öffnet sich im Browser, nachdem das Protokollverzeichnis korrekt geladen wurde.

Wenn Sie stattdessen so etwas sehen:

TensorBoard-Fehlerseite: Es wurden keine Graphdefinitionsdateien gefunden.

Das bedeutet, dass TensorBoard die Protokolldatei nicht finden kann. Stellen Sie sicher, dass Sie darauf verweisen. cd Um den richtigen Pfad zu finden, überprüfen Sie, ob das Protokollereignis tatsächlich erstellt wurde. Falls nicht, führen Sie den Trainingscode erneut aus.

Wenn Sie TensorBoard schließen möchten, drücken Sie im Terminalfenster STRG+C.

Kleiner Tipp: Überprüfen Sie die Anaconda-Eingabeaufforderung, um das aktuelle Arbeitsverzeichnis zu ermitteln.

Anaconda-Eingabeaufforderung mit Anzeige der aktiven hello-tf-Umgebung und des aktuellen Arbeitsverzeichnisses

Im obigen Screenshot befindet sich die Eingabeaufforderung unter C:\Users\Admin, daher sollte die Protokolldatei in diesem Ordner erstellt werden.

Häufig gestellte Fragen

Ein abgeschlossener Durchlauf hinterlässt einen Checkpoint-Index, eine oder mehrere model.ckpt-Dateien, eine graph.pbtxt-Datei und mindestens eine events.out.tfevents-Datei. TensorBoard liest nur die Ereignisdateien; die Checkpoints dienen dazu, das Training an der unterbrochenen Stelle fortzusetzen.

Ja. PyTorch Schiffe eine ZusammenfassungWriter Das erzeugt dasselbe Ereignisdateiformat, sodass der identische Befehl `tensorboard --logdir` das Dashboard rendert. Am Server ändert sich nichts – nur die Bibliothek, die die Zusammenfassungen erstellt.

Nein. Der gehostete Dienst wurde am 1. Januar 2024 eingestellt, und der Unterbefehl `tensorboard dev` gibt nun einen Fehler zurück. Ergebnisse können Sie teilen, indem Sie TensorBoard in einem Notebook ausführen, z. B. Google Colab oder durch Exportieren der Diagramme als CSV oder JSON.

Weisen Sie jedem Lauf einen eigenen Unterordner unter einem gemeinsamen übergeordneten Ordner zu und verweisen Sie mit dem Parameter `--logdir` auf diesen übergeordneten Ordner. Jeder Unterordner wird im linken Bereich als separater Lauf angezeigt, und die Kurven werden auf denselben Achsen mit jeweils einem Kontrollkästchen dargestellt.

Der Op-Level-Graph ist die Standardansicht und zeigt, wie TensorFlow das Programm interpretiert (von unten nach oben). Durch Auswahl des Keras-Tags wird zum konzeptionellen Graphen gewechselt, der nur die Modellschichten anzeigt und sich leichter mit Ihrem Entwurf vergleichen lässt.

Automatisierte Messungen erzeugen Dutzende von Durchläufen gleichzeitig, sodass das Dashboard eher als Vergleichstool denn als Monitor für einzelne Durchläufe dient. Das HParams-Plugin protokolliert jede Konfiguration zusammen mit ihren Metriken, sodass Sie die Versuche sortieren können, anstatt die Kurven einzeln zu lesen.

GitHub-Copilot Entwirft schnell Callback- und Summary-Writer-Boilerplate-Code. Behandeln Sie die Ausgabe als Entwurf: Sie vermischt häufig TensorFlow 1.x- und 2.x-APIs. Überprüfen Sie daher jeden Namen anhand der aktuellen Dokumentation, bevor Sie den Code ausführen.

Entweder wurde keine Ereignisdatei geschrieben oder der an `--logdir` übergebene Pfad stimmt nicht mit dem des Trainingsjobs überein. Stellen Sie sicher, dass in diesem Ordner eine Datei namens `events.out.tfevents` vorhanden ist. Windows Starten Sie TensorBoard vom selben Laufwerksbuchstaben.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: