Utilizzo di TensorBoard nei notebook

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza la fonte su GitHub Scarica taccuino

TensorBoard può essere utilizzato direttamente all'interno di esperienze di notebook quali Colab e Jupyter . Questo può essere utile per condividere i risultati, integrare TensorBoard nei flussi di lavoro esistenti e utilizzare TensorBoard senza installare nulla in locale.

Impostare

Inizia installando TF 2.0 e caricando l'estensione per notebook TensorBoard:

Per gli utenti Jupyter: Se avete installato Jupyter e TensorBoard nella stessa virtualenv, allora si dovrebbe essere pronti per partire. Se stai usando una configurazione più complicata, come un'installazione globale Jupyter e kernel per diversi Conda / virtualenv ambienti, quindi è necessario assicurarsi che il tensorboard binario è sul vostro PATH all'interno del contesto notebook Jupyter. Un modo per farlo è quello di modificare il kernel_spec anteporre dell'ambiente di bin directory a PATH , come descritto qui .

Per gli utenti Docker: Nel caso in cui si esegue un Docker immagine del server di Notebook Jupyter utilizza di tensorflow notte , è necessario esporre non solo la porta del notebook, ma la porta del TensorBoard. Quindi, esegui il contenitore con il seguente comando:

docker run -it -p 8888:8888 -p 6006:6006 \
tensorflow/tensorflow:nightly-py3-jupyter 

dove il -p 6006 è la porta di default TensorBoard. Questo ti assegnerà una porta per eseguire un'istanza TensorBoard. Per avere istanze simultanee, è necessario allocare più porte. Inoltre, passare --bind_all al %tensorboard per esporre la porta di fuori del contenitore.

# Load the TensorBoard notebook extension
%load_ext tensorboard

Importa TensorFlow, datetime e os:

import tensorflow as tf
import datetime, os

TensorBoard nei quaderni

Scarica il FashionMNIST set di dati e scalarla:

fashion_mnist = tf.keras.datasets.fashion_mnist

(x_train, y_train),(x_test, y_test) = fashion_mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz
32768/29515 [=================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz
26427392/26421880 [==============================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz
8192/5148 [===============================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz
4423680/4422102 [==============================] - 0s 0us/step

Crea un modello molto semplice:

def create_model():
  return tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
  ])

Addestrare il modello utilizzando Keras e il callback TensorBoard:

def train_model():

  model = create_model()
  model.compile(optimizer='adam',
                loss='sparse_categorical_crossentropy',
                metrics=['accuracy'])

  logdir = os.path.join("logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
  tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)

  model.fit(x=x_train, 
            y=y_train, 
            epochs=5, 
            validation_data=(x_test, y_test), 
            callbacks=[tensorboard_callback])

train_model()
Train on 60000 samples, validate on 10000 samples
Epoch 1/5
60000/60000 [==============================] - 11s 182us/sample - loss: 0.4976 - accuracy: 0.8204 - val_loss: 0.4143 - val_accuracy: 0.8538
Epoch 2/5
60000/60000 [==============================] - 10s 174us/sample - loss: 0.3845 - accuracy: 0.8588 - val_loss: 0.3855 - val_accuracy: 0.8626
Epoch 3/5
60000/60000 [==============================] - 10s 175us/sample - loss: 0.3513 - accuracy: 0.8705 - val_loss: 0.3740 - val_accuracy: 0.8607
Epoch 4/5
60000/60000 [==============================] - 11s 177us/sample - loss: 0.3287 - accuracy: 0.8793 - val_loss: 0.3596 - val_accuracy: 0.8719
Epoch 5/5
60000/60000 [==============================] - 11s 178us/sample - loss: 0.3153 - accuracy: 0.8825 - val_loss: 0.3360 - val_accuracy: 0.8782

Avviare TensorBoard all'interno del notebook usando magie :

%tensorboard --logdir logs

Ora puoi visualizzare dashboard come scalari, grafici, istogrammi e altri. Alcuni dashboard non sono ancora disponibili in Colab (come il plug-in del profilo).

L' %tensorboard magia ha esattamente lo stesso formato come la linea di richiamo del comando TensorBoard, ma con una % -sign di fronte ad essa.

Puoi anche avviare TensorBoard prima dell'allenamento per monitorarlo in corso:

%tensorboard --logdir logs

Lo stesso backend TensorBoard viene riutilizzato emettendo lo stesso comando. Se fosse stata scelta una directory di log diversa, verrebbe aperta una nuova istanza di TensorBoard. Le porte sono gestite automaticamente.

Inizia ad addestrare un nuovo modello e guarda TensorBoard aggiornarsi automaticamente ogni 30 secondi o aggiornarlo con il pulsante in alto a destra:

train_model()
Train on 60000 samples, validate on 10000 samples
Epoch 1/5
60000/60000 [==============================] - 11s 184us/sample - loss: 0.4968 - accuracy: 0.8223 - val_loss: 0.4216 - val_accuracy: 0.8481
Epoch 2/5
60000/60000 [==============================] - 11s 176us/sample - loss: 0.3847 - accuracy: 0.8587 - val_loss: 0.4056 - val_accuracy: 0.8545
Epoch 3/5
60000/60000 [==============================] - 11s 176us/sample - loss: 0.3495 - accuracy: 0.8727 - val_loss: 0.3600 - val_accuracy: 0.8700
Epoch 4/5
60000/60000 [==============================] - 11s 179us/sample - loss: 0.3282 - accuracy: 0.8795 - val_loss: 0.3636 - val_accuracy: 0.8694
Epoch 5/5
60000/60000 [==============================] - 11s 176us/sample - loss: 0.3115 - accuracy: 0.8839 - val_loss: 0.3438 - val_accuracy: 0.8764

È possibile utilizzare le tensorboard.notebook API per un controllo po 'di più:

from tensorboard import notebook
notebook.list() # View open TensorBoard instances
Known TensorBoard instances:

  - port 6006: logdir logs (started 0:00:54 ago; pid 265)
# Control TensorBoard display. If no port is provided, 
# the most recently launched TensorBoard is used
notebook.display(port=6006, height=1000)