Tutorial di TensorBoard: Visualizzazione di grafici con TensorFlow

⚡ Riepilogo intelligente

TensorBoard è l'interfaccia grafica per l'addestramento di modelli TensorFlow, che permette di tracciare curve di perdita, grafici del modello, istogrammi dei pesi ed embedding. Questa procedura guidata crea file di eventi con un estimatore, quindi apre la dashboard sulla porta 6006.

  • 🔘 Cinque dashboard: Scalari, grafici, distribuzioni, istogrammi e proiettore leggono ciascuno un diverso tipo di riepilogo.
  • ☑️ Cartella dei file di log: L'argomento model_dir determina la posizione in cui TensorFlow scrive i file events.out.tfevents.
  • ✅ Comando di avvio: Esegui il comando tensorboard –logdir=PATH, quindi apri http://localhost:6006 in qualsiasi browser.
  • 🧪 Tasso di apprendimento: Una curva di perdita frastagliata segnala un tasso troppo elevato perché il modello possa convergere.
  • ️ TensorFlow 2: La funzione di callback di Keras TensorBoard sostituisce la registrazione dell'estimatore mostrata nell'esempio originale.
  • ⚠️ Risoluzione dei problemi: Una dashboard vuota indica quasi sempre che il percorso della directory dei log non corrisponde a quello dell'esecuzione del training.

Tutorial di TensorBoard: Visualizzazione di grafici con TensorFlow

Cos'è TensorBoard?

TensorBoard è l'interfaccia utilizzata per visualizzare il grafico e altri strumenti per comprendere, eseguire il debug e ottimizzare il modello. È uno strumento che fornisce misurazioni e visualizzazioni per un flusso di lavoro di apprendimento automatico. Aiuta track metriche come la perdita e l'accuratezza, visualizzano il grafico del modello e proiettano gli embedding in spazi a dimensionalità inferiore.

TensorBoard viene fornito con TensorFlow e funziona come un piccolo server web locale che legge i file di evento che un processo di addestramento scrive su disco.

Esempio di visualizzazione di grafici TensorFlow tramite TensorBoard

L'immagine qui sotto proviene dal grafico di TensorBoard che genererai in questo tutorial. Si tratta del pannello principale:

Dashboard di TensorBoard Scalars che mostra la curva di perdita media del regressore DNN addestrato

Dall'immagine sotto potete vedere il pannello di visualizzazione dei grafici di TensorBoard. Il pannello contiene diverse schede, collegate al livello di informazioni aggiunte quando si esegue il modello.

Barra di navigazione di TensorBoard con le schede Scalari, Grafici, Distribuzioni, Istogrammi e Proiettore

  • Scalari: Mostrare diverse informazioni utili durante l'addestramento del modello
  • grafici: Mostra il modello
  • Istogramma: Visualizza i pesi con un istogramma
  • Distribuzione: Mostra la distribuzione del peso
  • Proiettore: Mostra l'analisi delle componenti principali e l'algoritmo T-SNE. La tecnica utilizzata per la riduzione della dimensionalità.

Durante questo tutorial di TensorBoard, addestrerai un semplice apprendimento profondo modello, e il grafico che produce viene letto dal basso verso l'alto.

Osservando il grafico, è possibile comprendere il funzionamento del modello. I badge numerati nello screenshot sottostante indicano queste quattro fasi:

  1. Accoda i dati al modello: invia al modello una quantità di dati pari alla dimensione del batch, ovvero il numero di feed di dati dopo ogni iterazione
  2. Fornisci i dati ai tensori
  3. Allena il modello
  4. Visualizza il numero di lotti durante l'addestramento. Salvare il modello sul disco.

Grafico di TensorFlow in TensorBoard con nodi numerati per la coda di input, il blocco dnn e l'operazione di salvataggio.

L'idea di base di TensorBoard è che una rete neurale può comportarsi come una scatola nera, e hai bisogno di uno strumento per ispezionare cosa c'è dentro. Pensa a TensorBoard come a una torcia per immergerti nella rete.

Aiuta a comprendere le dipendenze tra le operazioni, come vengono calcolati i pesi, visualizza la funzione di perdita e molte altre informazioni utili. Quando riunisci tutte queste informazioni, hai un ottimo strumento per eseguire il debug e scoprire come migliorare il modello.

Per darvi un'idea di quanto possa essere utile il grafico di TensorBoard, osservate le due curve di perdita qui sotto:

Due curve di perdita di TensorBoard affiancate che confrontano un modello che non apprende con un modello che converge

Una rete neurale decide come connettere i diversi neuroni e quanti strati sono necessari affinché il modello possa prevedere un risultato. Una volta definita l'architettura, non solo è necessario addestrare il modello, ma anche una metrica che ne misuri l'accuratezza della previsione. Questa metrica è chiamata funzione di perdita e l'obiettivo è minimizzarla, il che significa semplicemente che il modello commette meno errori.

Ogni algoritmo di addestramento ripete il calcolo molte volte finché la funzione di perdita non si stabilizza su una linea più piatta. Minimizzare la perdita richiede anche un tasso di apprendimento, ovvero la velocità con cui il modello apprende. Se si imposta un tasso di apprendimento troppo elevato, il modello non ha mai il tempo di imparare nulla: questo è il grafico a sinistra, dove la linea oscilla perché il modello sta di fatto procedendo a tentoni. Il grafico a destra mostra la perdita che diminuisce con le iterazioni fino a quando la curva si appiattisce, il che significa che il modello ha trovato una soluzione.

TensorBoard è un ottimo strumento per visualizzare queste metriche ed evidenziare potenziali problemi. Una rete neurale può impiegare ore o settimane prima di trovare una soluzione e TensorBoard aggiorna le metriche mentre il processo è ancora in corso. Pertanto, non è necessario attendere la fine per verificare se il modello si sta addestrando correttamente: basta aprire TensorBoard, controllare l'andamento dell'addestramento e apportare le modifiche necessarie.

Come si usa TensorBoard?

In questa sezione imparerai come aprire TensorBoard dal terminale su macOS e dalla riga di comando su WindowsQui l'attenzione si concentra sullo strumento piuttosto che sul modello, quindi il codice di addestramento è volutamente mantenuto breve.

Innanzitutto, è necessario importare le librerie che verranno utilizzate durante l'addestramento.

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

Tu crei i dati. Si tratta di un array di 10000 righe e 5 colonne.

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

Uscita

(10000, 5)

Il codice seguente trasforma i dati e crea il modello.

Si noti che il tasso di apprendimento è pari a 0.1. Se si modifica questo valore, il modello non troverà una soluzione. Questo è quanto accaduto sul lato sinistro dell'immagine qui sopra.

L'esempio utilizza un estimatore TensorFlow, l'API di alto livello che incapsula i calcoli matematici. Gli estimatori appartengono all'API TensorFlow 1.x, quindi i due frammenti seguenti vengono eseguiti sotto un'installazione 1.x o tramite l' tf.compat.v1 spazio dei nomi.

Per creare i file di log, è necessario specificare il percorso. Questo viene fatto con l'argomento model_dir.

Nell'esempio TensorBoard riportato di seguito, si memorizza il modello all'interno della directory di lavoro, ovvero dove si memorizza il notebook o Python file. All'interno di questo percorso, TensorFlow creerà una cartella chiamata train con una sottocartella chiamata 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    
      )
)

Uscita

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}

L'ultimo passaggio di questo esempio di visualizzazione di un grafico con TensorFlow consiste nell'addestramento del modello. Durante l'addestramento, TensorFlow scrive le informazioni nella directory del modello.

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

Uscita

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, lo stesso compito viene svolto dalla callback Keras TensorBoard, che scrive il grafico e le metriche per ogni epoca senza alcun codice di stima:

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

Una volta terminata l'esecuzione, la directory dei log contiene un file di checkpoint, un graph.pbtxt file e uno o più events.out.tfevents file — esattamente ciò che legge TensorBoard.

Per macOS utenti

La visualizzazione del Finder qui sotto mostra la nuova cartella train/linreg creata all'interno della directory di lavoro.

macOS Elenco dei file che mostra le cartelle di log di train e linreg con i file checkpoint, events e graph.pbtxt.

Per Windows utenti

On Windows Gli stessi file compaiono nel percorso specificato in model_dir, come evidenziato nella barra degli indirizzi.

Windows Visualizzazione Esplora risorse della cartella train linreg contenente i file di eventi e checkpoint di TensorFlow.

Lo stesso formato di file evento viene prodotto da PyTorch, quindi la dashboard non è limitata alle esecuzioni di TensorFlow.

Ora che hai scritto gli eventi di log, puoi aprire TensorBoard. TensorBoard è in esecuzione sulla porta 6006 per impostazione predefinita (Jupyter utilizza la porta 8888). Utilizzare il Terminale su macOS o il prompt di Anaconda su Windows.

Per macOS utenti

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

Il notebook è memorizzato nel percorso /Utenti/Guru99/tuto_TF

Per Windows utenti

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

Il notebook è archiviato nel percorso C:\Users\Admin\Anaconda3

Per avviare TensorBoard, esegui il seguente comando da quella directory.

Per macOS utenti

tensorboard --logdir=./train/linreg

Per Windows utenti

tensorboard --logdir=.\train\linreg

TensorBoard viene quindi servito all'indirizzo http://localhost:6006

Bandiera Cosa controlla
--logdir Cartella contenente i file degli eventi. Questo è l'unico flag obbligatorio.
--port Porta da utilizzare per il servizio. Il valore predefinito è 6006; modificarlo se una sessione precedente sta ancora utilizzando quella porta.
--bind_all Servire su ogni interfaccia di rete. TensorBoard si lega a localhost solo per impostazione predefinita, quindi l'accesso remoto richiede questo flag e non può essere combinato con --host.
--reload_interval Con quale frequenza, in secondi, viene eseguita una nuova scansione della directory dei log alla ricerca di nuovi dati.
--logdir_spec Sistema di fallback legacy che accetta più percorsi separati da virgole; --logdir non supporta più quel modulo.

Migliori tensorboard dev Il sottocomando non funziona più: il servizio TensorBoard.dev ospitato su server esterni è stato chiuso il 1° gennaio 2024. L'utilizzo locale non è interessato.

Su alcune macchine la console visualizza il nome host anziché localhost, come nel prompt di Anaconda riportato di seguito. Entrambi gli indirizzi aprono la stessa dashboard.

Il prompt di Anaconda esegue il comando tensorboard e visualizza l'indirizzo del server sulla porta 6006.

Copia e incolla l'indirizzo nel tuo browser preferito. Dovresti visualizzare la dashboard di Scalars mostrata di seguito.

La dashboard di TensorBoard Scalars si apre in un browser dopo il corretto caricamento della directory dei log.

Se invece visualizzi qualcosa di simile:

Errore nella pagina di TensorBoard: Nessun file di definizione del grafico trovato

Significa che TensorBoard non riesce a trovare il file di log. Assicurati di puntare cd indirizzati al percorso corretto oppure verifica che l'evento di log sia stato effettivamente creato. In caso contrario, esegui nuovamente il codice di addestramento.

Se desideri chiudere TensorBoard, premi CTRL+C nella finestra del terminale.

Suggerimento: controlla il prompt di Anaconda per conoscere la directory di lavoro corrente.

Il prompt di Anaconda mostra l'ambiente hello-tf attivo e la directory di lavoro corrente.

Nella schermata qui sopra, il prompt si trova in C:\Users\Admin, quindi il file di registro dovrebbe essere creato in quella cartella.

DOMANDE FREQUENTI

Al termine di un'esecuzione, viene creato un indice dei checkpoint, uno o più file model.ckpt, un file graph.pbtxt e almeno un file events.out.tfevents. TensorBoard legge solo i file degli eventi; i checkpoint esistono per consentire la ripresa dell'addestramento dal punto in cui si era interrotto.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. PyTorch navi un riassuntoWriter che emette lo stesso formato di file di evento, quindi lo stesso comando tensorboard –logdir genera la dashboard. Nulla cambia nel server, solo la libreria che produce i riepiloghi.

No. Il servizio ospitato è stato chiuso il 1 gennaio 2024 e il sottocomando tensorboard dev ora restituisce un errore. Condividi i risultati eseguendo TensorBoard all'interno di un notebook come Google Colab, oppure esportando i grafici in formato CSV o JSON.

Assegna a ciascuna esecuzione una sottocartella all'interno di una cartella principale condivisa, quindi imposta il parametro –logdir in modo che punti alla cartella principale. Ogni sottocartella apparirà come un'esecuzione separata nel pannello di sinistra e le curve saranno disegnate sugli stessi assi, ciascuna con una casella di controllo corrispondente.

Il grafico a livello operativo è la visualizzazione predefinita e mostra come TensorFlow interpreta il programma, disegnato dal basso verso l'alto. Selezionando il tag keras si passa al grafico concettuale, che mostra solo i livelli del modello ed è più facile da verificare rispetto al progetto.

Le scansioni automatizzate producono decine di esecuzioni contemporaneamente, quindi la dashboard diventa uno strumento di confronto piuttosto che un monitor di singole esecuzioni. Il plugin HParams registra ogni configurazione insieme alle relative metriche, consentendo di ordinare le prove invece di leggere le curve una per una.

Copilota GitHub Genera rapidamente codice boilerplate per callback e summary-writer. Considera l'output come una bozza: spesso mescola le API di TensorFlow 1.x e 2.x, quindi verifica ogni nome con la documentazione corrente prima di eseguire il codice.

Non è stato scritto alcun file di eventi oppure il percorso passato a –logdir non corrisponde a quello utilizzato dal processo di training. Verificare che esista un file events.out.tfevents in quella cartella e su Windows Avviare TensorBoard dalla stessa lettera di unità.

Riassumi questo post con: