Badanie wykresu TensorFlow

Przegląd

TensorBoard za Wykresy desce rozdzielczej jest potężnym narzędziem do badania modelu TensorFlow. Możesz szybko wyświetlić wykres koncepcyjny struktury modelu i upewnić się, że pasuje on do zamierzonego projektu. Możesz także wyświetlić wykres poziomu operacyjnego, aby zrozumieć, w jaki sposób TensorFlow rozumie Twój program. Analiza wykresu poziomu operacyjnego może dać wgląd w to, jak zmienić model. Na przykład możesz przeprojektować swój model, jeśli trening postępuje wolniej niż oczekiwano.

Ten samouczek przedstawia szybki przegląd sposobu generowania danych diagnostycznych wykresu i wizualizacji ich w panelu wykresów TensorBoard. Zdefiniujesz i wytrenujesz prosty model Keras Sequential dla zbioru danych Fashion-MNIST oraz nauczysz się rejestrować i analizować wykresy modelu. Będziesz też użyć śledzenia API do generowania danych do wykresu funkcji stworzonych z wykorzystaniem nowego tf.function adnotacji.

Ustawiać

# Load the TensorBoard notebook extension.
%load_ext tensorboard
from datetime import datetime
from packaging import version

import tensorflow as tf
from tensorflow import keras

print("TensorFlow version: ", tf.__version__)
assert version.parse(tf.__version__).release[0] >= 2, \
   
"This notebook requires TensorFlow 2.0 or above."
TensorFlow version:  2.2.0
import tensorboard
tensorboard
.__version__
'2.2.1'
# Clear any logs from previous runs
rm -rf ./logs/

Zdefiniuj model Kerasa

W tym przykładzie klasyfikator jest prostym czterowarstwowym modelem sekwencyjnym.

# Define the model.
model
= keras.models.Sequential([
    keras
.layers.Flatten(input_shape=(28, 28)),
    keras
.layers.Dense(32, activation='relu'),
    keras
.layers.Dropout(0.2),
    keras
.layers.Dense(10, activation='softmax')
])

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

Pobierz i przygotuj dane treningowe.

(train_images, train_labels), _ = keras.datasets.fashion_mnist.load_data()
train_images
= train_images / 255.0

Trenuj model i rejestruj dane

Przed treningiem, zdefiniować zwrotnego Keras TensorBoard , określając katalog dziennika. Przekazując to wywołanie zwrotne do Model.fit(), zapewniasz, że dane wykresu są rejestrowane do wizualizacji w TensorBoard.

# Define the Keras TensorBoard callback.
logdir
="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback
= keras.callbacks.TensorBoard(log_dir=logdir)

# Train the model.
model
.fit(
    train_images
,
    train_labels
,
    batch_size
=64,
    epochs
=5,
    callbacks
=[tensorboard_callback])
Epoch 1/5
938/938 [==============================] - 2s 2ms/step - loss: 0.6955 - accuracy: 0.7618
Epoch 2/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4877 - accuracy: 0.8296
Epoch 3/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4458 - accuracy: 0.8414
Epoch 4/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4246 - accuracy: 0.8476
Epoch 5/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4117 - accuracy: 0.8508
<tensorflow.python.keras.callbacks.History at 0x7f656ecc3fd0>

Wykres poziomu operacyjnego

Uruchom TensorBoard i poczekaj kilka sekund na załadowanie interfejsu użytkownika. Wybierz pulpit nawigacyjny Wykresy, dotykając „Wykresy” u góry.

%tensorboard --logdir logs

Możesz również opcjonalnie użyć TensorBoard.dev, aby utworzyć hostowany, udostępniany eksperyment.

!tensorboard dev upload \
 
--logdir logs \
 
--name "Sample op-level graph" \
 
--one_shot

Domyślnie TensorBoard wyświetla wykres op poziomu. (Po lewej stronie widać zaznaczoną etykietę „Default”.) Zauważ, że wykres jest odwrócony; dane przepływają od dołu do góry, więc są odwrócone w porównaniu z kodem. Widać jednak, że wykres ściśle odpowiada definicji modelu Keras, z dodatkowymi krawędziami do innych węzłów obliczeniowych.

Wykresy są często bardzo duże, więc możesz manipulować wizualizacją wykresu:

  • Przewiń do przybliżania i oddalania
  • Przeciągnij do patelni
  • Dwukrotne kliknięcie przełącza rozszerzenie węzła (węzeł może być pojemnik do innych węzłów)

Możesz również zobaczyć metadane, klikając węzeł. Pozwala to zobaczyć dane wejściowe, wyjściowe, kształty i inne szczegóły.

Wykres koncepcyjny

Oprócz wykresie wykonania, TensorBoard wyświetla także koncepcyjne wykres. To tylko widok modelu Keras. Może to być przydatne, jeśli ponownie używasz zapisanego modelu i chcesz zbadać lub zweryfikować jego strukturę.

Aby zobaczyć wykres koncepcyjny, wybierz tag „keras”. Na tym przykładzie widać zwinięty węzeł sekwencyjnym. Kliknij dwukrotnie węzeł, aby zobaczyć strukturę modelu:


Wykresy funkcji tf

Dotychczasowe przykłady opisywały wykresy modeli Keras, gdzie wykresy zostały utworzone poprzez zdefiniowanie warstw Keras i wywołanie Model.fit().

Mogą wystąpić sytuacja, w której trzeba użyć tf.function adnotacji do „autograf” , czyli przekształcać funkcję obliczeń Pythona do wysokowydajnego wykresie TensorFlow. Dla tych sytuacjach używać TensorFlow Podsumowanie śledzenia interfejsu API do logowania autografem funkcje wizualizacji w TensorBoard.

Aby użyć interfejsu Summary Trace API:

  • Definiowanie i opisywanie funkcji z tf.function
  • Użyj tf.summary.trace_on() bezpośrednio przed swoim miejscu wywołania funkcji.
  • Dodaj informacje o profilu (pamięć, czas procesora) na wykresie przekazując profiler=True
  • Z pisarzem plików Podsumowując, wezwanie tf.summary.trace_export() , aby zapisać dane dziennika

Następnie możesz użyć TensorBoard, aby zobaczyć, jak zachowuje się Twoja funkcja.

# The function to be traced.
@tf.function
def my_func(x, y):
 
# A simple hand-rolled layer.
 
return tf.nn.relu(tf.matmul(x, y))

# Set up logging.
stamp
= datetime.now().strftime("%Y%m%d-%H%M%S")
logdir
= 'logs/func/%s' % stamp
writer
= tf.summary.create_file_writer(logdir)

# Sample data for your function.
x
= tf.random.uniform((3, 3))
y
= tf.random.uniform((3, 3))

# Bracket the function call with
# tf.summary.trace_on() and tf.summary.trace_export().
tf
.summary.trace_on(graph=True, profiler=True)
# Call only one tf.function when tracing.
z
= my_func(x, y)
with writer.as_default():
  tf
.summary.trace_export(
      name
="my_func_trace",
      step
=0,
      profiler_outdir
=logdir)
%tensorboard --logdir logs/func

Możesz teraz zobaczyć strukturę swojej funkcji w rozumieniu TensorBoard. Kliknij przycisk radiowy „Profil”, aby wyświetlić statystyki procesora i pamięci.