Korzystanie z TensorBoard w notebookach

Zobacz na TensorFlow.org Uruchom w Google Colab Wyświetl źródło na GitHub Pobierz notatnik

TensorBoard może być stosowany bezpośrednio w doświadczeniach przenośnych takich jak Colab i Jupyter . Może to być pomocne przy udostępnianiu wyników, integracji TensorBoard z istniejącymi przepływami pracy i używaniu TensorBoard bez instalowania czegokolwiek lokalnie.

Ustawiać

Zacznij od zainstalowania TF 2.0 i załadowania rozszerzenia notebooka TensorBoard:

Dla użytkowników Jupyter: Jeśli zainstalowałeś Jupyter i TensorBoard do tego samego virtualenv, wtedy powinno być dobrze iść. Jeśli używasz bardziej skomplikowanych konfiguracji, takich jak globalny instalacji Jupyter i jądrach różnych Conda / virtualenv środowiskach, trzeba upewnić się, że tensorboard binarny jest na PATH wewnątrz kontekście notebooka Jupyter. Jednym ze sposobów, aby to zrobić, aby zmodyfikować kernel_spec do poprzedzić środowiska za bin katalogu do PATH , jak opisano tutaj .

Dla użytkowników Döcker: W przypadku używasz Docker obraz Jupyter serwerze Notebook korzystając TensorFlow na nocnej , konieczne jest, aby odsłonić nie tylko port notebooka, ale portu na TensorBoard użytkownika. Dlatego uruchom kontener za pomocą następującego polecenia:

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

gdzie -p 6006 jest portem domyślnym TensorBoard. To przydzieli Ci port do uruchomienia jednej instancji TensorBoard. Aby mieć współbieżne instancje, konieczne jest przydzielenie większej liczby portów. Również przejść --bind_all do %tensorboard aby odsłonić otwór na zewnątrz pojemnika.

# Load the TensorBoard notebook extension
%load_ext tensorboard

Importuj TensorFlow, datetime i system operacyjny:

import tensorflow as tf
import datetime, os

TensorBoard w zeszytach

Pobierz FashionMNIST zbiór danych i skalować go:

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

Stwórz bardzo prosty model:

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

Wytrenuj model za pomocą Keras i wywołania zwrotnego 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

Zacznij TensorBoard w notatniku przy użyciu magii :

%tensorboard --logdir logs

Możesz teraz wyświetlać pulpity nawigacyjne, takie jak skalary, wykresy, histogramy i inne. Niektóre pulpity nawigacyjne nie są jeszcze dostępne w Colab (np. wtyczka profilu).

%tensorboard magia ma dokładnie taki sam format jak linia wywołania polecenia TensorBoard, ale z % -znak przed nim.

Możesz również uruchomić TensorBoard przed treningiem, aby monitorować jego postęp:

%tensorboard --logdir logs

Ten sam backend TensorBoard jest ponownie używany, wydając to samo polecenie. Jeśli wybrano inny katalog logów, zostanie otwarta nowa instancja TensorBoard. Porty są zarządzane automatycznie.

Rozpocznij trenowanie nowego modelu i obserwuj automatyczną aktualizację TensorBoard co 30 sekund lub odśwież ją za pomocą przycisku w prawym górnym rogu:

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

Można użyć tensorboard.notebook API dla kontroli nieco więcej:

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)