Usar TensorBoard en computadoras portátiles

Ver en TensorFlow.org Ejecutar en Google Colab Ver fuente en GitHub Descargar cuaderno

TensorBoard se puede utilizar directamente en las experiencias portátiles tales como Colab y Jupyter . Esto puede ser útil para compartir resultados, integrar TensorBoard en flujos de trabajo existentes y usar TensorBoard sin instalar nada localmente.

Configuración

Comience instalando TF 2.0 y cargando la extensión para computadora portátil TensorBoard:

Para los usuarios Jupyter: Si ha instalado Jupyter y TensorBoard en la misma virtualenv, entonces usted debe ser bueno para ir. Si está utilizando una configuración más complicada, como una instalación Jupyter global y granos para diferentes entornos CONDA / virtualenv, entonces debe asegurarse de que el tensorboard binario está en su PATH dentro del contexto portátil Jupyter. Una forma de hacerlo es modificar el kernel_spec anteponer el entorno de bin directorio para PATH , tal como se describe aquí .

Para los usuarios de Docker: Si estás ejecutando un estibador imagen del servidor Notebook Jupyter utilizando TensorFlow de noche , es necesario exponer no sólo el puerto de la portátil, pero el puerto de la TensorBoard. Por lo tanto, ejecute el contenedor con el siguiente comando:

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

donde el -p 6006 es el puerto por defecto de TensorBoard. Esto le asignará un puerto para que ejecute una instancia de TensorBoard. Para tener instancias concurrentes, es necesario asignar más puertos. Además, pasar --bind_all a %tensorboard para exponer el puerto exterior del contenedor.

# Load the TensorBoard notebook extension
%load_ext tensorboard

Importa TensorFlow, datetime y os:

import tensorflow as tf
import datetime, os

TensorBoard en cuadernos

Descargar el FashionMNIST conjunto de datos y reduce la escala:

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

Entrena el modelo con Keras y la devolución de llamada de 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

Comience TensorBoard dentro del cuaderno usando magias :

%tensorboard --logdir logs

Ahora puede ver paneles como escalares, gráficos, histogramas y otros. Algunos paneles aún no están disponibles en Colab (como el complemento de perfil).

El %tensorboard magia tiene exactamente el mismo formato que la línea de comandos de invocación TensorBoard, pero con un % a firmar delante de ella.

También puedes iniciar TensorBoard antes de entrenar para monitorearlo en progreso:

%tensorboard --logdir logs

El mismo backend de TensorBoard se reutiliza al emitir el mismo comando. Si se eligiera un directorio de registros diferente, se abriría una nueva instancia de TensorBoard. Los puertos se gestionan automáticamente.

Comience a entrenar un nuevo modelo y observe cómo TensorBoard se actualiza automáticamente cada 30 segundos o actualícelo con el botón en la parte superior derecha:

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

Se pueden utilizar los tensorboard.notebook APIs para un control poco más:

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)