Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Badanie wykresu TensorFlow

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

Przegląd

Pulpit nawigacyjny Wykresy TensorBoard to potężne narzędzie do badania modelu TensorFlow. Możesz szybko wyświetlić koncepcyjny wykres struktury modelu i upewnić się, że pasuje do zamierzonego projektu. Możesz również 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 przebiega wolniej niż oczekiwano.

Ten samouczek zawiera krótkie omówienie sposobu generowania danych diagnostycznych wykresów i wizualizowania ich na pulpicie nawigacyjnym Wykresy TensorBoard. Zdefiniujesz i wytrenujesz prosty model Keras Sequential dla zestawu danych Fashion-MNIST i nauczysz się, jak rejestrować i analizować wykresy modelu. tf.function również interfejsu API śledzenia do wygenerowania danych wykresu dla funkcji utworzonych przy użyciu nowej adnotacji tf.function .

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 Keras

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 rozpoczęciem szkolenia zdefiniuj wywołanie zwrotne Keras TensorBoard , określając katalog dziennika. Przekazując to wywołanie zwrotne do Model.fit (), zapewniasz, że dane wykresu są rejestrowane w celu 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 na poziomie operacyjnym

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
 

Domyślnie TensorBoard wyświetla wykres poziomu operacyjnego. (Po lewej stronie widać zaznaczony znacznik „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. Można jednak zauważyć, że wykres ściśle pasuje do 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ć ich wizualizacją:

  • Przewiń, aby powiększyć lub pomniejszyć
  • Przeciągnij, aby przesunąć
  • Podwójne kliknięcie przełącza rozwijanie węzłów (węzeł może być kontenerem dla innych węzłów)

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

Wykres koncepcyjny

Oprócz wykresu wykonania TensorBoard wyświetla również wykres koncepcyjny . To jest widok samego modelu Keras. Może to być przydatne, jeśli ponownie używasz zapisanego modelu i chcesz sprawdzić lub zweryfikować jego strukturę.

Aby zobaczyć wykres koncepcyjny, wybierz znacznik „keras”. W tym przykładzie zobaczysz zwinięty węzeł sekwencyjny . Kliknij dwukrotnie węzeł, aby zobaczyć strukturę modelu:


Wykresy funkcji tf

W dotychczasowych przykładach opisano wykresy modeli Keras, gdzie wykresy zostały utworzone poprzez zdefiniowanie warstw Keras i wywołanie Model.fit ().

Możesz spotkać się z sytuacją, w której będziesz musiał użyć adnotacji tf.function do „autografu” , tj. Przekształcić funkcję obliczeniową Pythona w wysokowydajny wykres TensorFlow. W takich sytuacjach używa się interfejsu API śledzenia podsumowania TensorFlow do rejestrowania funkcji z autografem w celu wizualizacji w TensorBoard.

Aby użyć Summary Trace API:

  • Zdefiniuj i tf.function funkcję za pomocą tf.function
  • Użyj tf.summary.trace_on() bezpośrednio przed wywołaniem funkcji site.
  • Dodaj informacje o profilu (pamięć, czas procesora) do wykresu, przekazując profiler=True
  • Korzystając z programu zapisującego w pliku podsumowania, wywołaj 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 radiobutton „Profile”, aby zobaczyć statystyki procesora i pamięci.