Che cosa e TensorBoard?
TensorBoard è uno strumento di visualizzazione fornito con TensorFlow, una popolare libreria di machine learning sviluppata da Google.
TensorBoard aiuta gli sviluppatori e i ricercatori a comprendere, debuggare e ottimizzare i programmi TensorFlow.
Ecco alcune delle funzionalità principali di TensorBoard:
- Grafici Computazionali: Permette di visualizzare la struttura del modello TensorFlow, mostrando nodi e tensori come un grafo computazionale.
- Curva di Apprendimento: Puoi monitorare l'andamento delle metriche di allenamento e validazione, come la funzione di perdita o l'accuratezza, nel corso del tempo.
- Istogrammi di Distribuzione: Visualizza la distribuzione di valori per tensori nel tempo, come pesi o gradienti.
- Visualizzazione delle Immagini: Se stai addestrando un modello su immagini, puoi visualizzare esempi di immagini dal set di dati direttamente in TensorBoard.
- Visualizzazione degli Embedding: Permette di esplorare embedding (come quelli generati da modelli come Word2Vec) in uno spazio tridimensionale.
- Profiling: Aiuta a identificare colli di bottiglia nelle operazioni, mostrando dove il tuo modello trascorre la maggior parte del tempo.
- Eventi Personalizzati: Puoi loggare e visualizzare metriche o valori personalizzati.
- Audio e Testo: Oltre alle immagini, TensorBoard supporta anche la visualizzazione di dati audio e testo.
- Integrazione con altri Strumenti: TensorBoard può essere integrato con altre librerie e strumenti, come PyTorch, grazie a
tensorboardX
e altre estensioni simili.
Per utilizzare TensorBoard, durante l'allenamento di un modello TensorFlow, dovresti registrare i dati che desideri visualizzare su TensorBoard utilizzando un tf.summary.FileWriter
(nelle versioni precedenti di TensorFlow) o metodi simili nelle versioni più recenti. Una volta che questi dati sono stati registrati, puoi avviare TensorBoard e navigare attraverso una interfaccia web per esplorare le visualizzazioni.
Di seguito aggiungo uno script di esempio:
import tensorflow as tf from tensorflow.keras.datasets import mnist # Importiamo i dati MNIST (x_train, y_train), (x_test, y_test) = mnist.load_data() # Convertiamo i dati in float32 x_train = x_train.astype("float32") x_test = x_test.astype("float32") # Normalizziamo i dati x_train /= 255 x_test /= 255 # Definiamo il modello model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation="relu"), tf.keras.layers.Dense(10, activation="softmax") ]) # Compiliamo il modello model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"]) # Addiamo il callback di TensorBoard tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir="./logs") # Alleniamo il modello model.fit(x_train, y_train, epochs=10, callbacks=[tensorboard_callback]) # Valutiamo il modello model.evaluate(x_test, y_test) # Avvia TensorBoard # tensorboard --logdir ./logs
Questo codice crea un modello di classificazione per il dataset MNIST. Il modello è costituito da due strati nascosti di 128 neuroni ciascuno, con una funzione di attivazione ReLU. Il modello viene compilato con l'ottimizzatore Adam, la funzione di perdita "sparse_categorical_crossentropy" e la metrica "accuracy".
Per aggiungere il callback di TensorBoard, utilizziamo la funzione tf.keras.callbacks.TensorBoard()
. Il callback registra i dati di allenamento e valutazione in un file di log. Per visualizzare i dati in TensorBoard, possiamo avviare il comando seguente: tensorboard --logdir ./logs
Una volta avviato TensorBoard, possiamo accedere alla dashboard in un browser web. La dashboard mostra una serie di visualizzazioni che possono aiutarci a comprendere l'andamento dell'allenamento del modello.
Ecco alcune delle visualizzazioni che possiamo trovare in TensorBoard:
- Grafo del modello: Mostra il grafico del modello TensorFlow.
- Curve di perdita e accuratezza: Mostra le curve di perdita e accuratezza per l'allenamento e la valutazione.
- Histogrammi: Mostra gli istogrammi dei pesi e dei bias del modello.
- Embedding: Visualizza gli embeddings del modello in uno spazio a bassa dimensionalità.