Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Изучение графика TensorFlow

Посмотреть на TensorFlow.org Запустить в Google Colab Посмотреть источник на GitHub

обзор

Панель графиков TensorBoard - это мощный инструмент для изучения вашей модели TensorFlow. Вы можете быстро просмотреть концептуальный график структуры вашей модели и убедиться, что он соответствует предполагаемому дизайну. Вы также можете просмотреть график операционного уровня, чтобы понять, как TensorFlow понимает вашу программу. Изучение графика уровня операций может дать вам представление о том, как изменить свою модель. Например, вы можете изменить дизайн вашей модели, если обучение идет медленнее, чем ожидалось.

В этом руководстве представлен краткий обзор того, как генерировать диагностические данные графиков и визуализировать их на панели инструментов TensorBoard Graphs. Вы определите и обучите простую последовательную модель Keras для набора данных Fashion-MNIST и узнаете, как регистрировать и исследовать графики вашей модели. Вы также будете использовать API-интерфейс трассировки для создания графических данных для функций, созданных с использованием новой аннотации tf.function .

Настроить

 # 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/ 
 

Определить модель Keras

В этом примере классификатор представляет собой простую четырехслойную последовательную модель.

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

Загрузите и подготовьте данные тренинга.

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

Обучите модель и данные журнала

Перед началом обучения определите функцию обратного вызова Keras TensorBoard , указав каталог журнала. Передавая этот обратный вызов в Model.fit (), вы гарантируете, что данные графика записываются для визуализации в 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>

График операционного уровня

Запустите TensorBoard и подождите несколько секунд, пока загрузится пользовательский интерфейс. Выберите панель «Графики», нажав «Графики» вверху.

 %tensorboard --logdir logs
 

По умолчанию TensorBoard отображает график операционного уровня . (Слева вы видите выбранный тег «По умолчанию».) Обратите внимание, что график инвертирован; данные движутся снизу вверх, поэтому они перевернуты по сравнению с кодом. Однако вы можете видеть, что график точно соответствует определению модели Keras с дополнительными ребрами для других вычислительных узлов.

Графики часто бывают очень большими, поэтому вы можете управлять визуализацией графа:

  • Прокрутка для увеличения и уменьшения
  • Перетащите в панораму
  • Двойной щелчок переключает расширение узла (узел может быть контейнером для других узлов)

Вы также можете увидеть метаданные, нажав на узел. Это позволяет вам видеть входы, выходы, формы и другие детали.

Концептуальный граф

В дополнение к графику выполнения, TensorBoard также отображает концептуальный график . Это вид только модели Keras. Это может быть полезно, если вы повторно используете сохраненную модель и хотите проверить или проверить ее структуру.

Чтобы увидеть концептуальный график, выберите тег «keras». В этом примере вы увидите свернутый последовательный узел. Дважды щелкните узел, чтобы увидеть структуру модели:


Графики tf.functions

В приведенных выше примерах описаны графики моделей Keras, в которых графики были созданы путем определения слоев Keras и вызова Model.fit ().

Вы можете столкнуться с ситуацией, когда вам нужно использовать аннотацию tf.function для «автографа» , то есть преобразовать функцию вычисления Python в высокопроизводительный граф TensorFlow. В этих ситуациях вы используете TensorFlow Summary Trace API для регистрации функций с автографами для визуализации в TensorBoard.

Чтобы использовать Summary Trace API:

  • Определите и аннотируйте функцию с помощью функции tf.function
  • Используйте tf.summary.trace_on() непосредственно перед сайтом вызова функции.
  • Добавьте информацию профиля (память, время процессора) к графику, передавая profiler=True
  • С помощью средства записи файла Summary вызовите tf.summary.trace_export() чтобы сохранить данные журнала.

Затем вы можете использовать TensorBoard, чтобы увидеть, как ведет себя ваша функция.

 # 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
 

Теперь вы можете увидеть структуру вашей функции, понятную TensorBoard. Нажмите на кнопку «Профиль», чтобы увидеть статистику процессора и памяти.