Почему TensorBoard?

В трех предыдущих сообщениях я рассказывал о tf.keras » и других функциях TensorFlow 1.0 и 2.0, таких как вычислительные графики , Активное выполнение и AutoGraph . В этом посте я познакомлю вас с супер полезным инструментом TensorBoard!

Прочитав, вы должны понять:

  • Чем полезен TensorBoard;
  • Как работает TensorBoard и на что он способен
  • Основы работы с графиками, скалярами и гистограммами TensorBoard.

Чем полезен TensorBoard?

«Мы верим в Бога, все остальные должны приносить данные». —W. Эдвардс Деминг.

Хотя человеческий мозг - удивительная машина, он способен обрабатывать только одно значение за раз. Вот почему нам нужна визуализация данных, такая как диаграммы и графики, чтобы помочь нам получать и интерпретировать огромные объемы данных.

Построение и обучение вычислительных графов - непростая задача. Ваша модель может не соответствовать, не соответствовать требованиям или застрять на локальном оптимуме. У вас даже может быть проблема с исчезающим градиентом.

Как вы можете отлаживать, когда у вас есть все эти проблемы?

TensorBoard спешит на помощь!

Часто, чтобы что-то улучшить, нужно уметь их измерить. Это можно сделать с помощью TensorBoard, вспомогательного инструмента для обеспечения измерений и визуализаций, необходимых во время рабочего процесса машинного обучения.

Как работает TensorBoard?

Под капотом TensorBoard полагается на операции tf.summary для сериализации данных в формате protobuf; затем он записывает их в файлы журнала.

Вот полный список операций tf.summary:

  • tf.summary.scalar
  • tf.summary.image
  • tf.summary.audio
  • tf.summary.text
  • tf.summary.histogram

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

С другой стороны, по сравнению с TensorFlow 1.0, в TensorFlow 2 произошли некоторые серьезные изменения в отношении сводного API. Но я не буду вдаваться в подробности в этом посте.

Вместо этого с этого момента мы будем использовать полную версию TensorFlow 2.0 и tf.keras. В нашем примере кода вы не заметите этих крошечных деталей, связанных с tf.summary, благодаря идеальной инкапсуляции и абстракции, выполняемой tf.keras.

Примечание. Все примеры кода в этом сообщении предназначены только для TensorFlow 2.0.

Что умеет TensorBoard?

Независимо от того, используете ли вы Jupyter, Colab или любые их варианты, вы можете загрузить модуль TensorBoard с помощью этой волшебной команды:

# Load the TensorBoard notebook extension
%load_ext tensorboard

Как вы можете видеть на скриншоте выше TensorBoard, Скаляры, Графики, Распределения, Гистограммы и Профиль - это меню вверху.

Меню «Распределение» и «Профиль» говорят сами за себя: остальные я объясню одно за другим. Как правило, не все меню отображаются при запуске TensorBoard. Например, если ваш код работает в чистом режиме ожидания (без графиков), вы не увидите меню «Графики».

Вот пример кода, который мы будем использовать для демонстрации TensorBoard:

# Load the TensorBoard notebook extension
%load_ext tensorboard
import tensorflow as tf
import datetime
# Clear any logs from previous runs
!rm -rf ./logs/
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
def create_model():
  return tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
  ])
model = create_model()
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
log_dir="logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
model.fit(x=x_train, 
          y=y_train, 
          epochs=5, 
          validation_data=(x_test, y_test), 
          callbacks=[tensorboard_callback])

Конечно, TensorBoard также можно запускать в автономном режиме - вам не нужно встраивать его в блокноты.

Графики

Если вы не запускаете все в чистом режиме ожидания (т.е. без AutoGraph), вам так или иначе придется иметь дело с графиками. А TensorBoard может помочь вам детально визуализировать, как выглядит ваш фактический базовый вычислительный график.

В зависимости от сложности вашей проблемы ваша модель может иметь тысячи узлов. Из-за этого очень сложно получить вид с высоты птичьего полета, когда модель слишком велика.

К счастью, tf.keras заботится обо всех именах и объемах. Это упрощает навигацию по всему графику. (Если вы хотите опуститься в иерархии модели, все, что вам нужно сделать, это щелкнуть знак плюса, чтобы развернуть текущий узел).

Скаляры

На вкладке Скаляры отображается скалярное значение тензора по эпохам. Как я упоминал ранее, tf.keras скрывает ненужную сложность.

В примере кода, который использовался выше для демонстрации TensorBoard, tf.keras выполняет это с помощью обратного вызова tf.keras.callbacks.TensorBoard .

Под капотом tf.keras регистрирует данные о точности и потерях по окончании эпох по умолчанию, в конце каждой эпохи. Он также открыт для настройки, если вы хотите изменить поведение по умолчанию или добавить собственные метрики.

Гистограммы

Гистограмма - это точное представление распределения числовых данных.

На панели инструментов гистограммы TensorBoard выше показано, как со временем менялось распределение некоторых тензоров на вашем графике TensorFlow. Он делает это, показывая множество визуализаций гистограмм вашего тензора в разные моменты времени.

Резюме

«Чтобы разбогатеть, вам нужны измерения и кредитное плечо». - Пол Грэм

Я цитировал Пола Грэма в своих предыдущих сообщениях и не могу удержаться от этого еще раз, чтобы еще раз подчеркнуть важность измерения.

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

Теперь, когда мы рассмотрели, что, почему и как использовать TensorBoard , давайте сделаем шаг назад и посмотрим на все поля, которые мы отметили до сих пор:

Спасибо за внимание! Если вам понравилась эта статья, пожалуйста, нажимайте кнопку хлопка столько раз, сколько сможете. Это будет много значить и побудит меня продолжать делиться своими знаниями.

Не стесняйтесь делиться здесь своими вопросами и комментариями и подписывайтесь на меня, чтобы не пропустить последний контент!