TensorBoard-handledning: Visualisering av TensorFlow-grafer

⚡ Smart sammanfattning

TensorBoard är det visuella gränssnittet för TensorFlow-träningskörningar, där man plottar förlustkurvor, modellgrafer, vikthistogram och inbäddningar. Denna genomgång skriver händelsefiler med en estimator och öppnar sedan instrumentpanelen på port 6006.

  • 🔘 Fem instrumentpaneler: Skalärer, grafer, fördelningar, histogram och projektorer läser alla en annan sammanfattningstyp.
  • ☑️ Loggkatalog: Argumentet model_dir avgör var TensorFlow skriver events.out.tfevents-filerna.
  • ✅ Starta kommando: Kör tensorboard –logdir=PATH och öppna sedan http://localhost:6006 i valfri webbläsare.
  • 🧪 Inlärningshastighet: En ojämn förlustkurva signalerar en förlusttakt som är för hög för att modellen ska konvergera.
  • 🛠️ TensorFlow 2: Keras TensorBoard-återanropet ersätter estimatorloggningen som visas i det ursprungliga exemplet.
  • ⚠️ Felsökning: En tom instrumentpanel betyder nästan alltid att loggkatalogens sökväg inte matchar träningskörningen.

TensorBoard-handledning: Visualisering av TensorFlow-grafer

Vad är TensorBoard?

TensorBoard är gränssnittet som används för att visualisera grafen och andra verktyg för att förstå, felsöka och optimera modellen. Det är ett verktyg som tillhandahåller mätningar och visualiseringar för ett maskininlärningsarbetsflöde. Det hjälper track-mått som förlust och noggrannhet, visualisera modellgrafen och projicera inbäddningar i lägre dimensionella rum.

TensorBoard levereras med TensorFlow och körs som en liten lokal webbserver som läser händelsefilerna som ett träningsjobb skriver till disk.

TensorFlow-grafvisualisering med TensorBoard-exempel

Bilden nedan kommer från TensorBoard-grafen som du ska generera i den här handledningen. Det är huvudpanelen:

TensorBoard Scalars-instrumentpanel som visar average_loss-kurvan för den tränade DNN-regressorn

Från bilden nedan kan du se panelen för TensorBoard grafvisualisering. Panelen innehåller olika flikar, som är kopplade till den informationsnivå du lägger till när du kör modellen.

TensorBoard-navigeringsfältet med flikarna Skalärer, Grafer, Fördelningar, Histogram och Projektor

  • Skalärer: Visa olika användbara uppgifter under modellträningen
  • grafer: Visa modellen
  • Histogram: Visa vikter med ett histogram
  • Distribution: Visa viktfördelningen
  • Projektor: Visa principalkomponentanalys och T-SNE-algoritmen. Tekniken som används för dimensionalitetsreduktion

Under den här TensorBoard-handledningen kommer du att träna en enkel djupt lärande modellen, och grafen den producerar läses nerifrån och upp.

Om du tittar på grafen kan du förstå hur modellen fungerar. De numrerade märkena i skärmdumpen nedan markerar dessa fyra steg:

  1. Lägg data i kö till modellen: Skicka en mängd data lika med batchstorleken till modellen, dvs antal dataflöden efter varje iteration
  2. Mata in data till Tensorerna
  3. Träna modellen
  4. Visa antalet partier under utbildningen. Spara modellen på disken.

TensorFlow-graf i TensorBoard med numrerade noder för inmatningskön, dnn-blocket och sparoperationen

Grundtanken bakom TensorBoard är att ett neuralt nätverk kan bete sig som en svart låda, och du behöver ett verktyg för att inspektera vad som finns inuti den lådan. Tänk på TensorBoard som en ficklampa för att dyka ner i nätverket.

Det hjälper till att förstå beroenden mellan operationer, hur vikterna beräknas, visar förlustfunktionen och mycket annan användbar information. När du samlar all denna information har du ett bra verktyg för att felsöka och hitta hur du kan förbättra modellen.

För att ge dig en uppfattning om hur användbar TensorBoard-grafen kan vara, titta på de två förlustkurvorna nedan:

Två TensorBoard-förlustkurvor sida vid sida som jämför en modell som inte lär sig med en modell som konvergerar

Ett neuralt nätverk bestämmer hur de olika neuronerna ska kopplas samman och hur många lager som behövs innan modellen kan förutsäga ett resultat. När arkitekturen är definierad behöver man inte bara träna modellen utan också ett mått som mäter prediktionens noggrannhet. Det måttet kallas en förlustfunktion, och målet är att minimera det, vilket helt enkelt betyder att modellen gör färre fel.

Varje träningsalgoritm upprepar beräkningen många gånger tills förlusten når en planare linje. Att minimera förlusten kräver också en inlärningshastighet, vilket är den hastighet med vilken modellen lär sig. Om inlärningshastigheten sätts för högt hinner modellen aldrig lära sig någonting: det är diagrammet till vänster, där linjen rör sig upp och ner eftersom modellen i praktiken gissar. Diagrammet till höger visar att förlusten minskar över iterationerna tills kurvan planar ut, vilket innebär att modellen har hittat en lösning.

TensorBoard är ett utmärkt verktyg för att visualisera sådana mätvärden och belysa potentiella problem. Ett neuralt nätverk kan ta timmar eller veckor innan det hittar en lösning, och TensorBoard uppdaterar mätvärdena medan jobbet fortfarande körs. Du behöver därför inte vänta till slutet för att se om modellen tränas korrekt: öppna TensorBoard, kontrollera hur träningen går och gör lämpliga ändringar om det behövs.

Hur använder man TensorBoard?

I det här avsnittet lär du dig hur du öppnar TensorBoard från terminalen på macOS och från kommandoraden på WindowsFokus här ligger på verktyget snarare än modellen, så träningskoden hålls avsiktligt kort.

Först måste du importera de bibliotek som du kommer att använda under utbildningen.

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

Du skapar informationen. Det är en array med 10 000 rader och 5 kolumner.

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

Produktion

(10000, 5)

Koden nedan transformerar data och skapar modellen.

Observera att inlärningshastigheten är lika med 0.1. Om du ändrar denna hastighet till ett högre värde kommer modellen inte att hitta en lösning. Detta är vad som hände på vänster sida av bilden ovan.

Exemplet använder en TensorFlow-estimator, det högnivå-API som omsluter de matematiska beräkningarna. Estimatorer tillhör TensorFlow 1.x API, så de två kodavsnitten nedan körs under en 1.x-installation eller genom tf.compat.v1 namnområde.

För att skapa loggfilerna måste du ange sökvägen. Detta görs med argumentet model_dir.

I TensorBoard-exemplet nedan lagrar du modellen i arbetskatalogen, dvs. där du lagrar anteckningsboken eller Python fil. Inuti den här sökvägen skapar TensorFlow en mapp som heter train med en undermapp som heter 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    
      )
)

Produktion

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}

Det sista steget i detta exempel på en TensorFlow-visualisering av en graf består av att träna modellen. Under träningen skriver TensorFlow information till modellkatalogen.

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

Produktion

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>

På TensorFlow 2 utförs samma jobb av Keras TensorBoard-återanropet, som skriver grafen och mätvärdena per epoch utan någon estimatorkod:

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

När körningen är klar innehåller loggkatalogen en kontrollpunktsfil, en graph.pbtxt fil och en eller flera events.out.tfevents filer — exakt vad TensorBoard läser.

För macOS användare

Finder-vyn nedan visar den nya train/linreg-mappen som skapats i arbetskatalogen.

macOS fillista som visar loggmapparna för tåg och linjereg med kontrollpunkt, händelser och graph.pbtxt-filer

För Windows användare

On Windows Samma filer visas under sökvägen du skickade till model_dir, som markerat i adressfältet.

Windows Utforskarvy av tågets linreg-mapp som innehåller TensorFlow-händelse- och kontrollpunktsfiler

Samma händelsefilformat produceras av PyTorch, så instrumentpanelen är inte begränsad till TensorFlow-körningar.

Nu när du har skrivit loggen för händelserna kan du öppna TensorBoard. TensorBoard använder port 6006 som standard (Jupyter använder port 8888). Använd terminalen på macOS eller Anaconda-prompten på Windows.

För macOS användare

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

Anteckningsboken lagras i sökvägen /Användare/Guru99/tuto_TF

För Windows användare

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

Anteckningsboken lagras i sökvägen C:\Users\Admin\Anaconda3

För att starta TensorBoard, kör följande kommando från den katalogen.

För macOS användare

tensorboard --logdir=./train/linreg

För Windows användare

tensorboard --logdir=.\train\linreg

TensorBoard serveras sedan på http://localhost:6006

Flag Vad den kontrollerar
--logdir Katalogen som innehåller händelsefilerna. Detta är den enda obligatoriska flaggan.
--port Port att servera på. Standardvärdet är 6006; ändra det om en tidigare session fortfarande innehåller den porten.
--bind_all Servera på alla nätverksgränssnitt. TensorBoard binder endast till localhost som standard, så fjärråtkomst behöver denna flagga och den kan inte kombineras med --host.
--reload_interval Hur ofta, i sekunder, som loggkatalogen genomsöks efter nya data.
--logdir_spec Äldre alternativ som accepterar flera kommaseparerade sökvägar; --logdir stöder inte längre den formen.

Ocuco-landskapet tensorboard dev Underkommandot fungerar inte längre: den värdbaserade TensorBoard.dev-tjänsten stängdes av den 1 januari 2024. Lokal användning påverkas inte.

På vissa maskiner skriver konsolen ut värdnamnet istället för localhost, som i Anaconda-prompten nedan. Båda adresserna öppnar samma instrumentpanel.

Anaconda-prompten kör tensorboard-kommandot och skriver ut serveradressen på port 6006

Kopiera och klistra in adressen i din favoritwebbläsare. Du bör se Scalars instrumentpanel nedan.

TensorBoard Scalars-instrumentpanelen öppnas i en webbläsare efter att loggkatalogen har laddats korrekt

Om du istället ser något liknande detta:

TensorBoard-felsida läsning Inga grafdefinitionsfiler hittades

Det betyder att TensorBoard inte kan hitta loggfilen. Se till att du pekar cd till rätt sökväg, eller dubbelkolla att logghändelsen faktiskt skapades. Om den inte gjorde det, kör träningskoden igen.

Om du vill stänga TensorBoard, tryck CTRL+C i terminalfönstret.

Tips: kontrollera din Anaconda-prompt för den aktuella arbetskatalogen.

Anaconda-prompten som visar den aktiva hello-tf-miljön och den aktuella arbetskatalogen

I skärmbilden ovan finns prompten i C:\Users\Admin, så loggfilen bör skapas under den mappen.

Vanliga frågor

En avslutad körning lämnar ett kontrollpunktsindex, en eller flera model.ckpt-filer, en graph.pbtxt-fil och minst en events.out.tfevents-fil. TensorBoard läser bara händelsefilerna; kontrollpunkterna finns så att träningen kan återupptas där den stoppades.

Ja. PyTorch skickar en sammanfattningWriter som genererar samma händelsefilsformat, så det identiska tensorboard –logdir-kommandot renderar instrumentpanelen. Ingenting på servern ändras – bara biblioteket som producerar sammanfattningarna.

Nej. Den värdbaserade tjänsten stängdes den 1 januari 2024 och underkommandot tensorboard dev returnerar nu ett fel. Dela resultat genom att köra TensorBoard i en anteckningsbok som Google Colab, eller genom att exportera diagrammen som CSV eller JSON.

Ge varje körning en egen undermapp under en delad föräldermapp och peka sedan –logdir på föräldern. Varje undermapp visas som en separat körning i den vänstra panelen, och kurvorna ritas på samma axlar med en kryssruta vardera.

Operationsnivågrafen är standardvyn och visar hur TensorFlow förstår programmet, ritat nerifrån och upp. Om du väljer keras-taggen växlar du till den konceptuella grafen, som endast visar modellagren och är lättare att kontrollera mot din design.

Automatiserade svepningar producerar dussintals körningar samtidigt, så instrumentpanelen blir ett jämförelseverktyg snarare än en monitor för en enda körning. HParams-pluginet loggar varje konfiguration tillsammans med dess mätvärden, vilket låter dig sortera försök istället för att läsa kurvor en efter en.

GitHub Copilot utkast callback och sammanfattningsskrivare standardiserar snabbt. Behandla utdata som ett utkast: det blandar ofta TensorFlow 1.x och 2.x API:er, så kontrollera varje namn mot den aktuella dokumentationen innan du kör koden.

Antingen skrevs ingen händelsefil eller så matchar inte sökvägen som skickades till –logdir den som användes av träningsjobbet. Bekräfta att en events.out.tfevents-fil finns i den mappen, och på Windows starta TensorBoard från samma enhetsbeteckning.

Sammanfatta detta inlägg med: