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.
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:
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.
- 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:
- Lägg data i kö till modellen: Skicka en mängd data lika med batchstorleken till modellen, dvs antal dataflöden efter varje iteration
- Mata in data till Tensorerna
- Träna modellen
- Visa antalet partier under utbildningen. Spara modellen på disken.
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:
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: {'_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.
För Windows användare
On Windows Samma filer visas under sökvägen du skickade till model_dir, som markerat i adressfältet.
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.
Kopiera och klistra in adressen i din favoritwebbläsare. Du bör se Scalars instrumentpanel nedan.
Om du istället ser något liknande detta:
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.
I skärmbilden ovan finns prompten i C:\Users\Admin, så loggfilen bör skapas under den mappen.










