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

Посмотреть на TensorFlow.org Запускаем в Google Colab Посмотреть исходный код на GitHub Скачать блокнот

Обзор

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

В этом руководстве представлен краткий обзор того, как сгенерировать диагностические данные графиков и визуализировать их на панели инструментов TensorBoard Graphs. Вы определите и обучите простую модель Keras Sequential для набора данных 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.dev для создания размещенного эксперимента с общим доступом.

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

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

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

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

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

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

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

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


Графики tf.функций

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

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

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

  • Определение и аннотировать функцию с tf.function
  • Используйте tf.summary.trace_on() непосредственно перед вашим сайтом вызова функции.
  • Добавить информацию о профиле (память, процессорное время) на графике, передавая profiler=True
  • С Резюме файла писатель, вызов 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. Щелкните радиокнопку «Профиль», чтобы просмотреть статистику ЦП и памяти.