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

Обзор

Графы панель 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. Щелкните радиокнопку «Профиль», чтобы просмотреть статистику ЦП и памяти.