Прекратите использовать Matplotlib для построения графика убытков - визуализируйте графики и модели, фильтры, убытки…
TensorBoard - это мощный инструмент визуализации, встроенный прямо в TensorFlow, который позволяет вам находить идеи в вашей модели машинного обучения.
TensorBoard может визуализировать все, что угодно, от скаляров (например, потери / точность) до изображений, гистограмм, графика TensorFlow и многого другого.
СОДЕРЖАНИЕ
- Как работает TensorBoard
- Визуализация графа TF (и моделей Keras)
- Типы резюме
- Использовать в
model.fit
- Заключение
Примечание: это руководство в основном создано для 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.FileWriter
object. 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
- Мы создаем
FileWriter
объект, который будет записывать некоторые данные в TensorBoard. - Мы создаем список погрешностей для чтения
- Мы создаем
acc_var
, тензор для поддержания точности, иacc_summ
, сводку, которая записываетacc_var
в TensorBoard. - Затем мы инициируем сеанс и начинаем перебирать наши значения точности.
- Как указано в списке точности, мы обновляем значение
acc_var
и добавляем сводку в TensorBoard. - Наконец, мы промываем и закрываем
FileWriter
TF 2.x
- Мы создаем объект
create_file_writer
, который будет записывать некоторые данные в TensorBoard. - Мы создаем список погрешностей для чтения
- Мы устанавливаем объект
create_file_writer
как писатель по умолчанию. - При чтении из списка точности мы вызываем
tf.summary.scalar
для записи данных в TensorBoard. - Наконец, мы сбрасываем и закрываем объект записи.
Выполнение всего этого создаст следующий график:
Мы рассмотрим, как мы можем визуализировать потерю / точность в реальном времени, когда реальная модель тренируется, позже, в разделе «Использование в 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 здесь.