Utiliser TensorBoard dans les notebooks

Voir sur TensorFlow.org Exécuter dans Google Colab Voir la source sur GitHub Télécharger le cahier

TensorBoard peut être utilisé directement dans les expériences d'ordinateurs portables tels que Colab et Jupyter . Cela peut être utile pour partager les résultats, intégrer TensorBoard dans des flux de travail existants et utiliser TensorBoard sans rien installer localement.

Installer

Commencez par installer TF 2.0 et chargez l'extension TensorBoard pour notebook :

Pour les utilisateurs Jupyter: Si vous avez installé Jupyter et TensorBoard dans le même virtualenv, alors vous devriez être bon d'aller. Si vous utilisez une configuration plus compliquée, comme une installation globale Jupyter et noyaux pour différents environnements Conda / virtualenv, vous devez vous assurer que le tensorboard binaire est sur votre PATH dans le contexte de bloc - notes Jupyter. Une façon de le faire est de modifier le kernel_spec préfixer de l'environnement bin répertoire de PATH , comme décrit ici .

Pour les utilisateurs Docker: Si vous utilisez une Docker image de Jupyter serveur portable à l' aide de la nuit tensorflow , il est nécessaire d'exposer non seulement le port de l'ordinateur portable, mais le port du TensorBoard. Ainsi, exécutez le conteneur avec la commande suivante :

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

où l' -p 6006 est le port par défaut de TensorBoard. Cela vous allouera un port pour exécuter une instance TensorBoard. Pour avoir des instances concurrentes, il est nécessaire d'allouer plus de ports. En outre, passer --bind_all à %tensorboard pour exposer l'orifice extérieur du récipient.

# Load the TensorBoard notebook extension
%load_ext tensorboard

Importez TensorFlow, datetime et os :

import tensorflow as tf
import datetime, os

TensorBoard dans les cahiers

Télécharger le FashionMNIST ensemble de données et agrandissez:

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

Créez un modèle très simple :

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

Entraînez le modèle à l'aide de Keras et du rappel 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

Démarrez TensorBoard dans le bloc - notes à l' aide magies :

%tensorboard --logdir logs

Vous pouvez désormais afficher des tableaux de bord tels que des scalaires, des graphiques, des histogrammes et autres. Certains tableaux de bord ne sont pas encore disponibles dans Colab (comme le plugin de profil).

Le %tensorboard magique a exactement le même format que l'appel de la ligne de commande TensorBoard, mais avec un % --sign devant elle.

Vous pouvez également démarrer TensorBoard avant l'entraînement pour suivre sa progression :

%tensorboard --logdir logs

Le même backend TensorBoard est réutilisé en émettant la même commande. Si un autre répertoire de journaux était choisi, une nouvelle instance de TensorBoard serait ouverte. Les ports sont gérés automatiquement.

Commencez à entraîner un nouveau modèle et regardez TensorBoard se mettre à jour automatiquement toutes les 30 secondes ou actualisez-le avec le bouton en haut à droite :

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

Vous pouvez utiliser les tensorboard.notebook API pour un peu plus de contrôle:

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)