TensorBoard-zelfstudie: Grafiekvisualisatie in TensorFlow

โšก Slimme samenvatting

TensorBoard is de visuele interface voor TensorFlow-trainingsruns, waarmee verliescurven, modelgrafieken, gewichtshistogrammen en embeddings kunnen worden weergegeven. Deze handleiding schrijft gebeurtenisbestanden met een estimator en opent vervolgens het dashboard op poort 6006.

  • ๐Ÿ”˜ Vijf dashboards: Scalaire waarden, grafieken, verdelingen, histogrammen en projectoren lezen elk een ander type samenvatting.
  • โ˜‘๏ธ Logmap: Het argument `model_dir` bepaalt waar TensorFlow de `events.out.tfevents`-bestanden opslaat.
  • โœ… Startopdracht: Voer `tensorboard โ€“logdir=PATH` uit en open vervolgens `http://localhost:6006` in een willekeurige browser.
  • ๐Ÿงช Leersnelheid: Een grillige verliescurve duidt op een te hoge snelheid waardoor het model niet kan convergeren.
  • ๏ธ TensorFlow 2: De Keras TensorBoard-callback vervangt de estimator-logging die in het oorspronkelijke voorbeeld werd getoond.
  • โš ๏ธ Probleemoplossen: Een leeg dashboard betekent bijna altijd dat het pad naar de logmap niet overeenkomt met de trainingssessie.

TensorBoard-zelfstudie: Grafiekvisualisatie in TensorFlow

Wat is TensorBoard?

TensorBoard is de interface die wordt gebruikt om de grafiek te visualiseren en andere tools om het model te begrijpen, te debuggen en te optimaliseren. Het is een tool die metingen en visualisaties biedt voor een machine learning-workflow. Het helpt track-statistieken zoals verlies en nauwkeurigheid, visualiseren de modelgrafiek en projecteren embeddings in lagerdimensionale ruimtes.

TensorBoard wordt geleverd met TensorFlow en functioneert als een kleine lokale webserver die de gebeurtenisbestanden leest die een trainingstaak naar de schijf schrijft.

Visualisatie van TensorFlow-grafieken met behulp van TensorBoard (voorbeeld)

De onderstaande afbeelding is afkomstig van de TensorBoard-grafiek die u in deze handleiding gaat genereren. Het is het hoofdvenster:

TensorBoard Scalars-dashboard met de gemiddelde verliescurve van de getrainde DNN-regressor.

Op de onderstaande afbeelding ziet u het paneel van de TensorBoard-grafiekvisualisatie. Het paneel bevat verschillende tabbladen, die zijn gekoppeld aan het informatieniveau dat u toevoegt wanneer u het model uitvoert.

De navigatiebalk van TensorBoard met de tabbladen Scalars, Graphs, Distributions, Histograms en Projector.

  • scalairen: Toon verschillende nuttige informatie tijdens de modeltraining.
  • grafieken: Toon het model
  • Histogram: Gewichten weergeven met een histogram.
  • Distributie: Geef de gewichtsverdeling weer.
  • projector: Toon de hoofdcomponentenanalyse en het T-SNE-algoritme. De techniek die wordt gebruikt voor dimensionale reductie.

Tijdens deze TensorBoard-tutorial train je een eenvoudig model. diepgaand leren Het model en de grafiek die het produceert, worden van onder naar boven gelezen.

Als je naar de grafiek kijkt, kun je begrijpen hoe het model werkt. De genummerde symbolen in de onderstaande schermafbeelding markeren deze vier fasen:

  1. Plaats de gegevens in het model: push een hoeveelheid gegevens die gelijk is aan de batchgrootte naar het model, dat wil zeggen het aantal gegevensfeeds na elke iteratie
  2. Voer de gegevens naar de Tensors
  3. Train het model
  4. Geef het aantal batches weer tijdens de training. Sla het model op de schijf op.

TensorFlow-grafiek in TensorBoard met genummerde knooppunten voor de invoerwachtrij, het DNN-blok en de opslagbewerking.

Het basisidee achter TensorBoard is dat een neuraal netwerk zich als een zwarte doos kan gedragen, en dat je een tool nodig hebt om te onderzoeken wat zich binnenin die doos bevindt. Zie TensorBoard als een zaklamp waarmee je in het netwerk kunt duiken.

Het helpt om de afhankelijkheden tussen bewerkingen te begrijpen, hoe de gewichten worden berekend, geeft de verliesfunctie weer en veel andere nuttige informatie. Wanneer u al deze stukjes informatie samenbrengt, hebt u een geweldige tool om te debuggen en te ontdekken hoe u het model kunt verbeteren.

Om u een idee te geven hoe nuttig de TensorBoard-grafiek kan zijn, bekijk dan de twee verliescurven hieronder:

Twee verliescurves van TensorBoard naast elkaar, ter vergelijking van een model dat niet leert met een model dat convergeert.

Een neuraal netwerk bepaalt hoe de verschillende neuronen met elkaar verbonden worden en hoeveel lagen er nodig zijn voordat het model een uitkomst kan voorspellen. Zodra de architectuur is gedefinieerd, moet je niet alleen het model trainen, maar ook een maatstaf die de nauwkeurigheid van de voorspelling meet. Deze maatstaf wordt een verliesfunctie genoemd en het doel is om deze te minimaliseren, wat simpelweg betekent dat het model minder fouten maakt.

Elk trainingsalgoritme herhaalt de berekening vele malen totdat het verlies een vlakkere lijn bereikt. Het minimaliseren van het verlies vereist ook een leerfrequentie, oftewel de snelheid waarmee het model leert. Stel de leerfrequentie te hoog in en het model krijgt nooit de tijd om iets te leren: dat is de grafiek links, waar de lijn op en neer beweegt omdat het model in feite gokt. De grafiek rechts laat zien hoe het verlies afneemt over de iteraties totdat de curve afvlakt, wat betekent dat het model een oplossing heeft gevonden.

TensorBoard is een uitstekend hulpmiddel om dergelijke statistieken te visualiseren en potentiรซle problemen aan het licht te brengen. Een neuraal netwerk kan uren of zelfs weken nodig hebben om een โ€‹โ€‹oplossing te vinden, en TensorBoard vernieuwt de statistieken terwijl de training nog loopt. Je hoeft dus niet tot het einde te wachten om te zien of het model correct traint: open TensorBoard, controleer de voortgang van de training en breng indien nodig de juiste wijzigingen aan.

Hoe gebruik ik TensorBoard?

In dit gedeelte leer je hoe je TensorBoard vanuit de terminal kunt openen. macOS en vanaf de commandoregel op WindowsDe focus ligt hier op de tool in plaats van op het model, daarom is de trainingscode bewust kort gehouden.

Allereerst moet u de bibliotheken importeren die u tijdens de training zult gebruiken.

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

Je maakt de data aan. Het is een array met 10000 rijen en 5 kolommen.

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

uitgang

(10000, 5)

De onderstaande code transformeert de gegevens en creรซert het model.

Merk op dat de leerfrequentie gelijk is aan 0.1. Als u deze frequentie verhoogt, zal het model geen oplossing vinden. Dit is wat er aan de linkerkant van de bovenstaande afbeelding is gebeurd.

Het voorbeeld maakt gebruik van een TensorFlow-estimator, de API op hoog niveau die de wiskundige berekeningen omvat. Estimators behoren tot de TensorFlow 1.x API, dus de twee onderstaande codefragmenten werken onder een 1.x-installatie of via de tf.compat.v1 naamruimte.

Om de logbestanden aan te maken, moet u het pad opgeven. Dit doet u met het argument. model_dir.

In het onderstaande TensorBoard-voorbeeld slaat u het model op in de werkmap, oftewel waar u het notebook opslaat. Python bestand. Binnen dit pad maakt TensorFlow een map aan met de naam train, met daarin een submap met de naam 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    
      )
)

uitgang

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}

De laatste stap van dit TensorFlow-voorbeeld voor het visualiseren van grafieken bestaat uit het trainen van het model. Tijdens de training schrijft TensorFlow informatie naar de modelmap.

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

uitgang

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>

In TensorFlow 2 wordt dezelfde taak uitgevoerd door de Keras TensorBoard-callback, die de grafiek en de per-epoch-statistieken schrijft zonder dat er estimator-code nodig is:

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])

Zodra de uitvoering is voltooid, bevat de logmap een checkpointbestand, een graph.pbtxt bestand en een of meer events.out.tfevents bestanden โ€” precies wat TensorBoard leest.

Bij macOS gebruikers

De Finder-weergave hieronder toont de nieuwe map train/linreg die is aangemaakt in de werkmap.

macOS Bestandslijst met de logmappen van train en linreg, inclusief checkpoint-, event- en graph.pbtxt-bestanden.

Bij Windows gebruikers

On Windows Dezelfde bestanden verschijnen onder het pad dat je hebt doorgegeven aan model_dir, zoals aangegeven in de adresbalk.

Windows Verkennerweergave van de map train linreg met daarin TensorFlow-gebeurtenis- en checkpointbestanden.

Hetzelfde gebeurtenisbestandsformaat wordt geproduceerd door PyTorchHet dashboard is dus niet beperkt tot TensorFlow-runs.

Nu de loggebeurtenissen zijn opgeslagen, kunt u TensorBoard openen. TensorBoard is standaard beschikbaar op poort 6006.Jupyter gebruikt poort 8888). Gebruik de terminal op macOS of de Anaconda-prompt op Windows.

Bij macOS gebruikers

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

Het notitieboek is opgeslagen in de map /Users/.Guru99/tuto_TF

Bij Windows gebruikers

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

Het notebook wordt opgeslagen in het pad C:\Users\Admin\Anaconda3

Om TensorBoard te starten, voert u de volgende opdracht uit vanuit die map.

Bij macOS gebruikers

tensorboard --logdir=./train/linreg

Bij Windows gebruikers

tensorboard --logdir=.\train\linreg

TensorBoard wordt vervolgens aangeboden op http://localhost:6006

Vlag Wat het controleert
--logdir Map met de gebeurtenisbestanden. Dit is de enige vereiste vlag.
--port Poort waarop de server moet draaien. De standaardpoort is 6006; wijzig deze als een eerdere sessie die poort nog steeds gebruikt.
--bind_all Beschikbaar zijn op elke netwerkinterface. TensorBoard is standaard alleen verbonden met localhost, dus toegang op afstand vereist deze vlag, en deze kan niet worden gecombineerd met --host.
--reload_interval Hoe vaak, in seconden, wordt de logmap opnieuw gescand op nieuwe gegevens?
--logdir_spec Terugvaloptie voor oudere systemen die meerdere door komma's gescheiden paden accepteert; --logdir ondersteunt dat formulier niet langer.

De tensorboard dev Het subcommando werkt niet meer: โ€‹โ€‹de gehoste TensorBoard.dev-service is op 1 januari 2024 stopgezet. Lokaal gebruik ondervindt hier geen hinder van.

Op sommige machines wordt in de console de hostnaam weergegeven in plaats van localhost, zoals in de onderstaande Anaconda-prompt. Beide adressen openen hetzelfde dashboard.

Anaconda prompt voert het tensorboard-commando uit en print het serveradres op poort 6006.

Kopieer en plak het adres in uw favoriete browser. U zou het onderstaande Scalars-dashboard moeten zien.

Het TensorBoard Scalars-dashboard wordt in een browser geopend nadat de logmap correct is geladen.

Als je in plaats daarvan zoiets ziet:

TensorBoard-foutpagina met de melding: Er zijn geen grafiekdefinitiebestanden gevonden.

Dit betekent dat TensorBoard het logbestand niet kan vinden. Zorg ervoor dat je de juiste instellingen aanwijst. cd Ga naar het juiste pad of controleer of de loggebeurtenis daadwerkelijk is aangemaakt. Zo niet, voer de trainingscode dan opnieuw uit.

Als je TensorBoard wilt sluiten, druk je op CTRL+C in het terminalvenster.

Tip: controleer de Anaconda-prompt voor de huidige werkmap.

Anaconda-prompt met de actieve hello-tf-omgeving en de huidige werkmap.

In de bovenstaande schermafbeelding bevindt de prompt zich in C:\Users\Admin, dus het logbestand moet in die map worden aangemaakt.

Veelgestelde vragen

Na een voltooide trainingssessie worden een checkpoint-index, een of meer model.ckpt-bestanden, een graph.pbtxt-bestand en ten minste รฉรฉn events.out.tfevents-bestand achtergelaten. TensorBoard leest alleen de event-bestanden; de checkpoints bestaan โ€‹โ€‹zodat de training kan worden hervat vanaf het punt waar deze was gestopt.

Ja. PyTorch schepen een samenvattingWriter die hetzelfde gebeurtenisbestandformaat genereert, waardoor het identieke commando `tensorboard โ€“logdir` het dashboard weergeeft. Er verandert niets aan de server โ€” alleen de bibliotheek die de samenvattingen produceert.

Nee. De gehoste service is op 1 januari 2024 stopgezet en de subopdracht `tensorboard dev` geeft nu een foutmelding. Deel resultaten door TensorBoard in een notebook uit te voeren, bijvoorbeeld: Google Colab, of door de grafieken te exporteren als CSV of JSON.

Geef elke run een eigen submap onder een gedeelde bovenliggende map en verwijs vervolgens met โ€“logdir naar die bovenliggende map. Elke submap verschijnt als een aparte run in het linkerpaneel en de curves worden op dezelfde assen getekend, elk met een selectievakje.

De grafiek op op-niveau is de standaardweergave en laat zien hoe TensorFlow het programma begrijpt, van onder naar boven getekend. Door de tag 'keras' te selecteren, schakelt u over naar de conceptuele grafiek, die alleen de modellagen weergeeft en gemakkelijker te controleren is aan de hand van uw ontwerp.

Geautomatiseerde sweeps genereren tientallen runs tegelijk, waardoor het dashboard een vergelijkingstool wordt in plaats van een monitor voor individuele runs. De HParams-plugin registreert elke configuratie samen met de bijbehorende meetwaarden, zodat u de tests kunt sorteren in plaats van de curves รฉรฉn voor รฉรฉn te bekijken.

GitHub-copiloot Genereer snel standaard callback- en summary-writer-code. Beschouw de output als een concept: het bevat vaak een mix van TensorFlow 1.x- en 2.x-API's, dus controleer elke naam aan de hand van de actuele documentatie voordat u de code uitvoert.

Er is ofwel geen gebeurtenisbestand geschreven, ofwel komt het pad dat is doorgegeven aan โ€“logdir niet overeen met het pad dat de trainingstaak heeft gebruikt. Controleer of er een bestand events.out.tfevents in die map aanwezig is, en op Windows Start TensorBoard vanaf dezelfde stationsletter.

Vat dit bericht samen met: