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.
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:
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.
- 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:
- 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
- Voer de gegevens naar de Tensors
- Train het model
- Geef het aantal batches weer tijdens de training. Sla het model op de schijf op.
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:
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: {'_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.
Bij Windows gebruikers
On Windows Dezelfde bestanden verschijnen onder het pad dat je hebt doorgegeven aan model_dir, zoals aangegeven in de adresbalk.
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.
Kopieer en plak het adres in uw favoriete browser. U zou het onderstaande Scalars-dashboard moeten zien.
Als je in plaats daarvan zoiets ziet:
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.
In de bovenstaande schermafbeelding bevindt de prompt zich in C:\Users\Admin, dus het logbestand moet in die map worden aangemaakt.










