Прекратите использовать Matplotlib для построения графика убытков - визуализируйте графики и модели, фильтры, убытки…

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

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

СОДЕРЖАНИЕ

  1. Как работает TensorBoard
  2. Визуализация графа TF (и моделей Keras)
  3. Типы резюме
  4. Использовать в model.fit
  5. Заключение

Примечание: это руководство в основном создано для TensorFlow 1.x, и большинство примеров кода будет написано при условии, что у вас установлен TF 1.x. Несмотря на это, в разделе субтитров каждого образца кода будет ссылка на версию TensorFlow 2.x, которая даст идентичные результаты, если только код не является непереводимым.

Самым большим изменением в TensorBoard с TF 1.x до TF 2.x является переименование tf.summary.FileWriter в tf.summary.create_file_writer . Подробнее об изменениях читайте здесь.

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

›TensorFlow 1.x

Основным компонентом TensorBoard является tf.summary.FileWriterobject. FileWriter инициализируется именем каталога, обычно './graphs' или './logs', а затем необязательно, но рекомендуется график или сеанс.

Затем мы вызываем метод FileWriter.add_summary() с summary и global_step, например, номером эпохи, который записывается в файл в ранее указанном каталоге. summary - это уникальный тип данных, возвращаемых такими объектами, как tf.summary.scalar или tf.summary.histogram, мы поговорим об этих типах позже.

Например, мы могли бы запустить…

… Чтобы добавить кучу фальшивых значений точности с их номером эпохи.

›TensorFlow 2.x

Основным компонентом TensorBoard является объект tf.summary.create_file_writer.

Затем мы выполняем наши операции внутри блока with create_file_writer().as_default(), где мы, наконец, можем добавить сводку.

Сводки - это специальные функции, такие как tf.summary.scalar, которые записывают данные в TensorBoard. Позже мы более подробно рассмотрим эти функции.

Собирая все это вместе, мы находим следующее:

По мере продолжения мы разберем это по частям.

Запуск веб-сервера (TF 1 и 2)

Наконец, мы можем запустить локальный веб-сервер TensorBoard, выполнив следующую команду в терминале:

tensorboard --logdir=<DIRECTORY NAME>

Например, если бы мы назвали наш каталог './graphs', мы бы запустили:

tensorboard --logdir='./graphs'

Это аналогично запуску Jupyter Notebook

Это создает гиперссылку в терминале, которую вы можете ctrl+click открыть, после чего вас встретит экран, который должен выглядеть следующим образом:

Визуализация графа TF (и моделей Keras)

TensorFlow 2.x Примечание. TensorFlow 2.x обычно работает в режиме активного выполнения и не создает график. Несмотря на это, в приведенных примерах кода используются обходные пути для визуализации графиков.

По мере создания и обучения наших моделей TensorFlow 1.x создает вычислительный граф под капотом.

Например, следующий фрагмент кода…

Был бы график, который выглядит примерно так…

Хорошо, для этого примера несложно визуализировать этот пример в голове без визуализации, но разве не удобно автоматически генерировать визуализацию графика, независимо от его размера?

К счастью для нас, TensorBoard упрощает эту задачу.

Единственная строка, которую мы должны добавить к приведенному выше коду, это (только TF 1.x, TF 2.x более сложный):

writer = tf.summary.FileWriter('./graphs', graph=sess.graph)

Делаем все:

Теперь, запустив команду для запуска TensorBoard,

tensorboard --logdir='./graphs' --port 6006

Откроется новая вкладка «ГРАФИКИ».

При выборе этой вкладки должен отображаться следующий экран:

Не слишком впечатляюще для такого небольшого примера, но давайте доведем его до крайности:

Вот этот график, который стоит визуализировать!

Но на реальных примерах вы, вероятно, будете не просто визуализировать умножение и сложение, давайте визуализируем настоящую модель Кераса.

Ниже я скопировал свою реализацию генератора U-Net из моей статьи о CycleGAN:

Теперь мы можем визуализировать это с помощью:

Перейдя на TensorBoard, вы найдете огромный график:

Вы можете заметить здесь, что график не очень подробный - каждый блок модели имеет только название «последовательный».

Чтобы исправить это, мы можем увеличить масштаб с помощью прокрутки, а затем дважды щелкнуть блок, чтобы увидеть более подробную информацию.

Вуаля! Замечательный график!

Типы резюме

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

В TensorFlow 1.x asummary - это уникальный тип объекта, который позволяет нам записывать данные в TensorBoard. В TensorFlow 2.x сводки намного проще и автоматически записывают данные в TensorBoard при их вызове.

Сводки принимают два обязательных ввода: имя для сводки и тензор, который будет регистрироваться - у них есть несколько дополнительных параметров, которые относятся к типу сводки.

Сводки возвращаются с помощью следующего набора операций: summary.scalar(), summary.histogram(), summary.image(), summary.audio() и summary.text(), давайте рассмотрим каждую из них.

Скалярный

Давайте быстро рассмотрим рассмотренный ранее пример записи ложных значений точности:

Давайте рассмотрим это шаг за шагом:

TF 1.x

  1. Мы создаем FileWriter объект, который будет записывать некоторые данные в TensorBoard.
  2. Мы создаем список погрешностей для чтения
  3. Мы создаем acc_var, тензор для поддержания точности, и acc_summ, сводку, которая записывает acc_var в TensorBoard.
  4. Затем мы инициируем сеанс и начинаем перебирать наши значения точности.
  5. Как указано в списке точности, мы обновляем значение acc_var и добавляем сводку в TensorBoard.
  6. Наконец, мы промываем и закрываем FileWriter

TF 2.x

  1. Мы создаем объект create_file_writer, который будет записывать некоторые данные в TensorBoard.
  2. Мы создаем список погрешностей для чтения
  3. Мы устанавливаем объект create_file_writer как писатель по умолчанию.
  4. При чтении из списка точности мы вызываем tf.summary.scalar для записи данных в TensorBoard.
  5. Наконец, мы сбрасываем и закрываем объект записи.

Выполнение всего этого создаст следующий график:

Мы рассмотрим, как мы можем визуализировать потерю / точность в реальном времени, когда реальная модель тренируется, позже, в разделе «Использование в model.fit».

Гистограмма

TensorBoard позволяет нам легко создавать гистограммы из Tensor любой формы и размера…

… Все, что имеет значение, - это то, как данные внутри него распределяются.

Но мы можем сделать больше; мы также можем складывать гистограммы, вызывая writer.add_summary несколько раз:

TensorBoard упрощает визуализацию мультимодальных распределений:

Изображение

Показывать изображения с помощью TensorBoard очень просто:

Чтобы отобразить случайный шум:

Может быть, вы могли бы показать несколько обучающих примеров:

Другие возможные примеры включают в себя визуализацию изображений, генерируемых GAN, визуализацию промежуточных слоев в сверточных сетях, визуализацию скрытого пространства в вариационных автокодировщиках или все, что вы только можете придумать!

Текст

У TensorBoard есть несколько нишевых возможностей для отображения текста:

Некоторые возможные варианты использования включают выборку входных данных для языковых моделей или лучшее наблюдение за выходными данными генеративных текстовых моделей.

Аудио

TensorBoard также может отображать аудио. Поскольку аудио - это более сложный тип данных, я не буду вдаваться в подробности, однако документация доступна здесь.

Объединить и объединить все (только TF 1.x)

Довольно часто вам может понадобиться написать несколько резюме на TensorBoard одновременно; вот где tf.summary.merge и tf.summary.merge_all вступают в игру.

summary.merge принимает список из нескольких сводок, возвращенных предыдущими методами, и возвращает единую сводку, которую мы можем записать в TensorBoard.

Это создаст некоторый случайный шум и гистограмму в единой сводке.

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

Тот же результат, что и в предыдущем примере - не нужно указывать, какие резюме объединять!

Используйте в `model.fit`

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

В Keras есть встроенный обратный вызов, разработанный для TensorBoard: keras.callbacks.TensorBoard

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

Ради интереса, давайте включим несколько из них.

Если вы перейдете на TensorBoard, вы сразу увидите график модели:

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

А исследование в другом месте откроет другие части модели ...

Например, визуализации фильтров:

Или гистограммы смещения!

Заключение

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

И как всегда, до следующего раза,

Удачного кодирования!

Исходный код этой статьи доступен на моем GitHub здесь.