TensorBoard — это набор веб-приложений для проверки и понимания ваших запусков и графиков TensorFlow.
Этот README дает обзор ключевых концепций TensorBoard, а также способы интерпретации визуализаций, предоставляемых TensorBoard. Подробный пример использования TensorBoard см. в руководстве: TensorBoard: Начало работы. Документация о том, как использовать TensorBoard для работы с изображениями, графиками, гиперпараметрами и т. д., находится здесь, а также обучающие руководства в Colab.
TensorBoard предназначен для работы полностью в автономном режиме, не требуя доступа к Интернету. Например, это может быть на вашем локальном компьютере, за корпоративным брандмауэром или в центре обработки данных.
Перед запуском TensorBoard убедитесь, что вы сгенерировали сводные данные в каталоге журналов, создав модуль записи сводки:
# sess.graph contains the graph definition; that enables the Graph Visualizer.
file_writer = tf . summary . FileWriter ( '/path/to/logs' , sess . graph )
Более подробную информацию см. в руководстве по TensorBoard. Если у вас есть файлы событий, запустите TensorBoard и укажите каталог журнала. Если вы используете предварительно скомпилированный пакет TensorFlow (например, вы установили через pip), запустите:
tensorboard --logdir path/to/logs
Или, если вы создаете из исходного кода:
bazel build tensorboard:tensorboard
./bazel-bin/tensorboard/tensorboard --logdir path/to/logs
# or even more succinctly
bazel run tensorboard -- --logdir path/to/logs
Это должно напечатать, что TensorBoard запущен. Затем подключитесь к http://localhost:6006.
TensorBoard требует logdir
для чтения журналов. Для получения информации о настройке TensorBoard запустите tensorboard --help
.
TensorBoard можно использовать в Google Chrome или Firefox. Другие браузеры могут работать, но могут быть ошибки или проблемы с производительностью.
Первый шаг в использовании TensorBoard — получение данных из вашего запуска TensorFlow. Для этого вам нужны сводные операции. Сводные операции — это операции, такие же, как tf.matmul
и tf.nn.relu
, что означает, что они принимают тензоры, создают тензоры и оцениваются внутри графа TensorFlow. Однако у суммарных операций есть особенность: создаваемые ими тензоры содержат сериализованные протобуфы, которые записываются на диск и отправляются в TensorBoard. Чтобы визуализировать сводные данные в TensorBoard, вам следует оценить сводную операцию, получить результат, а затем записать этот результат на диск с помощью summary.FileWriter. Полное объяснение с примерами находится в руководстве.
Поддерживаемые сводные операции включают в себя:
tf.summary.scalar
tf.summary.image
tf.summary.audio
tf.summary.text
tf.summary.histogram
Когда вы выполняете сводную операцию, вы также присваиваете ей tag
. По сути, тег представляет собой имя данных, записанных этой операцией, и будет использоваться для организации данных во внешнем интерфейсе. Панели скаляров и гистограмм упорядочивают данные по тегам и группируют теги в папки в соответствии с каталогом/подобием/иерархией. Если у вас много тегов, рекомендуем группировать их косой чертой.
summary.FileWriters
берут сводные данные из TensorFlow, а затем записывают их в указанный каталог, известный как logdir
. В частности, данные записываются в дамп записей, предназначенный только для добавления, в имени файла которого будет содержаться «tfevents». TensorBoard считывает данные из полного каталога и организует их в историю одного выполнения TensorFlow.
Почему он читает весь каталог, а не отдельный файл? Возможно, вы использовали Supervisor.py для запуска своей модели, и в этом случае, если TensorFlow выйдет из строя, супервизор перезапустит его с контрольной точки. При перезапуске он начнет запись в новый файл событий, а TensorBoard объединит различные файлы событий вместе, чтобы создать последовательную историю того, что произошло.
Возможно, вы захотите визуально сравнить несколько исполнений вашей модели; например, предположим, что вы изменили гиперпараметры и хотите посмотреть, сходится ли он быстрее. TensorBoard позволяет это сделать с помощью различных «прогонов». Когда TensorBoard при запуске передается logdir
, он рекурсивно просматривает дерево каталогов с корнем в logdir
в поисках подкаталогов, содержащих данные tfevents. Каждый раз, когда он сталкивается с таким подкаталогом, он загружает его как новый run
, и интерфейс соответствующим образом организует данные.
Например, вот хорошо организованный каталог журналов TensorBoard с двумя запусками: «run1» и «run2».
/some/path/mnist_experiments/
/some/path/mnist_experiments/run1/
/some/path/mnist_experiments/run1/events.out.tfevents.1456525581.name
/some/path/mnist_experiments/run1/events.out.tfevents.1456525585.name
/some/path/mnist_experiments/run2/
/some/path/mnist_experiments/run2/events.out.tfevents.1456525385.name
/tensorboard --logdir /some/path/mnist_experiments
Вы также можете передать список каталогов журналов, разделенных запятыми, и TensorBoard будет отслеживать каждый каталог. Вы также можете присвоить имена отдельным каталогам журналов, поставив двоеточие между именем и путем, как в
tensorboard --logdir_spec name1:/path/to/logs/1,name2:/path/to/logs/2
Использование этого флага ( --logdir_spec
) не рекомендуется, и его обычно можно избежать . TensorBoard рекурсивно просматривает каталоги журналов; для более детального управления предпочтительнее использовать дерево символических ссылок. Некоторые функции могут не работать при использовании --logdir_spec
вместо --logdir
.
Скалярная панель TensorBoard визуализирует скалярную статистику, которая меняется со временем; например, вы можете отслеживать потери модели или скорость обучения. Как описано в разделе «Основные понятия» , вы можете сравнивать несколько прогонов, а данные группируются по тегам. Линейные графики имеют следующие взаимодействия:
Нажатие на маленький синий значок в левом нижнем углу каждой диаграммы развернет диаграмму.
Перетаскивание прямоугольной области на диаграмме приведет к увеличению масштаба.
Двойной щелчок по графику уменьшит масштаб
При наведении курсора мыши на диаграмму появится перекрестие, а значения данных будут записаны в селекторе прогонов слева.
Кроме того, вы можете создавать новые папки для организации тегов, вводя регулярные выражения в поле в левом верхнем углу панели управления.
Панель гистограммы отображает, как статистическое распределение тензора менялось с течением времени. Он визуализирует данные, записанные с помощью tf.summary.histogram
. На каждой диаграмме показаны временные «срезы» данных, где каждый срез представляет собой гистограмму тензора на заданном шаге. Он организован так, что самый старый временной шаг находится сзади, а самый последний временной шаг впереди. При изменении режима гистограммы со «смещения» на «наложение» перспектива будет вращаться так, что каждый фрагмент гистограммы визуализируется как линия и накладывается друг на друга.
Панель распределения — это еще один способ визуализации данных гистограммы из tf.summary.histogram
. Он показывает некоторую статистику высокого уровня по распределению. Каждая линия на диаграмме представляет собой процентиль распределения по данным: например, нижняя линия показывает, как минимальное значение менялось с течением времени, а линия в середине показывает, как изменилось медианное значение. Читая сверху вниз, строки имеют следующее значение: [maximum, 93%, 84%, 69%, 50%, 31%, 16%, 7%, minimum]
Эти процентили также можно рассматривать как границы стандартного отклонения нормального распределения: [maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, minimum]
так что цветные области, читаемые изнутри наружу, имеют ширину [σ, 2σ, 3σ]
соответственно.
Панель управления изображениями может отображать PNG-изображения, сохраненные с помощью tf.summary.image
. Панель мониторинга настроена таким образом, что каждая строка соответствует отдельному тегу, а каждый столбец соответствует запуску. Поскольку панель изображений поддерживает произвольные файлы PNG, вы можете использовать ее для встраивания пользовательских визуализаций (например, диаграмм рассеяния matplotlib) в TensorBoard. На этой панели управления всегда отображается последнее изображение для каждого тега.
Панель управления звуком может встраивать воспроизводимые аудио-виджеты для аудио, сохраненного через tf.summary.audio
. Панель мониторинга настроена таким образом, что каждая строка соответствует отдельному тегу, а каждый столбец соответствует запуску. Эта панель мониторинга всегда встраивает последний звук для каждого тега.
Graph Explorer может визуализировать график TensorBoard, позволяя проверять модель TensorFlow. Чтобы максимально эффективно использовать визуализатор графиков, вам следует использовать области имен для иерархической группировки операций на вашем графике — в противном случае график может быть трудно расшифровать. Дополнительную информацию, включая примеры, см. в руководстве по изучению графов TensorFlow.
Встраиваемый проектор позволяет визуализировать многомерные данные; например, вы можете просмотреть входные данные после того, как они были встроены вашей моделью в многомерное пространство. Проектор для внедрения считывает данные из файла контрольных точек модели и может быть настроен с использованием дополнительных метаданных, таких как файл словаря или изображения спрайтов. Дополнительные сведения см. в руководстве по встраиванию проектора.
Текстовая панель отображает фрагменты текста, сохраненные с помощью tf.summary.text
. Поддерживаются все функции Markdown, включая гиперссылки, списки и таблицы.
Панель мониторинга временных рядов отображает единый интерфейс, содержащий все ваши скаляры, гистограммы и изображения, сохраненные с помощью tf.summary.scalar
, tf.summary.image
или tf.summary.histogram
. Это позволяет, например, просматривать линейный график «точности» рядом с гистограммами активации и изображениями обучающих примеров.
Особенности включают в себя:
Пользовательские цвета прогона: нажмите на цветные кружки в селекторе прогонов, чтобы изменить цвет прогона.
Закрепленные карточки: щелкните значок «булавка» на любой карточке, чтобы добавить ее в закрепленный раздел вверху для быстрого сравнения.
Настройки: правая панель предлагает настройки для диаграмм и других визуализаций. Важные настройки будут сохраняться во всех сеансах TensorBoard, если они размещены по одному и тому же URL-адресу.
Автозаполнение в фильтре тегов: упрощается поиск конкретных диаграмм.
Сначала проверьте правильность каталога, переданного в --logdir
. Вы также можете убедиться в этом, перейдя на панель управления Scalars (в меню «Неактивно») и найдя путь к каталогу журналов в нижней части левой боковой панели.
Если вы загружаете по правильному пути, убедитесь, что файлы событий присутствуют. TensorBoard будет рекурсивно просматривать свой каталог журнала, это нормально, если данные вложены в подкаталог. Убедитесь, что следующее показывает хотя бы один результат:
find DIRECTORY_PATH | grep tfevents
Вы также можете проверить, действительно ли файлы событий содержат данные, запустив Tensorboard в режиме проверки, чтобы проверить содержимое ваших файлов событий.
tensorboard --inspect --logdir DIRECTORY_PATH
Вывод файла событий, соответствующего пустому TensorBoard, иногда может отображать несколько шагов, представляющих несколько начальных событий, которые не отображаются TensorBoard (например, при использовании обратного вызова Keras TensorBoard):
tensor
first_step 0
last_step 2
max_step 2
min_step 0
num_steps 2
outoforder_steps [(2, 0), (2, 0), (2, 0)]
Напротив, выходные данные файла событий с большим количеством данных могут выглядеть следующим образом:
tensor
first_step 0
last_step 55
max_step 250
min_step 0
num_steps 60
outoforder_steps [(2, 0), (2, 0), (2, 0), (2, 0), (50, 9), (100, 19), (150, 29), (200, 39), (250, 49)]
Обновление: после выпуска 2.3.0 TensorBoard больше не перезагружается автоматически каждые 30 секунд. Чтобы снова включить это поведение, откройте настройки, щелкнув значок шестеренки в правом верхнем углу веб-интерфейса TensorBoard, и включите «Перезагрузить данные».
Обновление: экспериментальную опцию
--reload_multifile=true
теперь можно использовать для опроса всех «активных» файлов в каталоге на наличие новых данных, а не самого последнего, как описано ниже. Файл является «активным», если он получил новые данные в течение--reload_multifile_inactive_secs
секунд назад, значение по умолчанию — 86400.
Эта проблема обычно возникает из-за того, как TensorBoard перебирает файлы tfevents
: он проходит через файл событий в порядке временных меток и считывает только один файл за раз. Предположим, у нас есть файлы с метками времени a
и b
, где a . Как только TensorBoard прочитает все события в
a
, он никогда не вернется к нему, поскольку предполагает, что любые новые события записываются в более новый файл. Это может вызвать проблему, если, например, у вас есть два FileWriters
одновременно записывающие в один и тот же каталог. Если у вас есть несколько средств записи сводок, каждый из них должен вести запись в отдельный каталог.
Обновление: экспериментальную опцию
--reload_multifile=true
теперь можно использовать для опроса всех «активных» файлов в каталоге на наличие новых данных, определенных как любой файл, получивший новые данные в течение--reload_multifile_inactive_secs
секунд назад, по умолчанию — 86400.
Нет. TensorBoard ожидает, что одновременно будет записываться только один файл событий, а несколько авторов сводок означают несколько файлов событий. Если вы используете распределенный экземпляр TensorFlow, мы рекомендуем вам назначить одного работника «главным», ответственным за всю сводную обработку. См. пример супервизора.py.
Если вы видите данные, которые, кажется, путешествуют назад во времени и перекрываются сами с собой, есть несколько возможных объяснений.
У вас может быть несколько запусков TensorFlow, которые все записывают в один и тот же каталог журналов. Пожалуйста, каждый запуск TensorFlow записывает в свой собственный каталог журналов.
Обновление: экспериментальную опцию
--reload_multifile=true
теперь можно использовать для опроса всех «активных» файлов в каталоге на наличие новых данных, определенных как любой файл, получивший новые данные в течение--reload_multifile_inactive_secs
секунд назад, по умолчанию — 86400.
В вашем коде может быть ошибка, из-за которой переменная global_step (переданная в FileWriter.add_summary
) поддерживается неправильно.
Возможно, ваше задание TensorFlow завершилось сбоем и было перезапущено с более ранней контрольной точки. См . раздел «Как обрабатывать перезапуски TensorFlow» ниже.
В качестве обходного пути попробуйте изменить отображение оси X в TensorBoard с steps
на wall_time
. Это часто проясняет проблему.
В TensorFlow предусмотрен механизм плавного восстановления в случае сбоя или прекращения выполнения задания: TensorFlow может периодически записывать файлы контрольных точек модели, что позволяет перезапустить TensorFlow без потери всего прогресса обучения.
Однако это может усложнить работу TensorBoard; представьте, что TensorFlow написал контрольную точку на шаге a
, а затем продолжил работу до шага b
, а затем произошел сбой и перезапустился в момент времени a
. Все события, записанные между a
и b
были «осиротевшими» событием перезапуска и должны быть удалены.
Чтобы облегчить это, у нас есть сообщение SessionLog
в tensorflow/core/util/event.proto
, которое может записывать SessionStatus.START
как событие; как и все события, с ним может быть связан step
. Если TensorBoard обнаружит событие SessionStatus.START
с шагом a
, он предположит, что каждое событие с шагом больше a
было потерянным, и отбросит эти события. Это поведение можно отключить с помощью флага --purge_orphaned_data false
(в версиях после 0.7).
Scalar Dashboard поддерживает экспорт данных; вы можете нажать кнопку «Включить ссылки для скачивания» на левой панели. Затем каждый график будет содержать ссылки для скачивания содержащихся в нем данных.
Если вам нужен доступ к полному набору данных, вы можете прочитать файлы событий, которые использует TensorBoard, с помощью метода summary_iterator
.
Да! Вы можете клонировать и поработать с одним из примеров и создать свои собственные потрясающие визуализации. Дополнительная документация по системе плагинов описана в руководстве ADDING_A_PLUGIN. Не стесняйтесь отправлять запросы на добавление функций или вопросы о функциональности плагина.
Когда вы будете удовлетворены своим новым революционным плагином, ознакомьтесь с разделом распространения о том, как опубликовать его в PyPI, и поделитесь им с сообществом.
Используя плагин пользовательских скаляров, вы можете создавать скалярные графики с линиями для пользовательских пар тегов запуска. Однако на исходной информационной панели скаляров каждый скалярный график соответствует данным для определенного тега и содержит строки для каждого запуска, включающего этот тег.
Графики границ (которые визуализируют нижнюю и верхнюю границы) можно создать с помощью специального плагина скаляров. Исходный плагин скаляров не поддерживает визуализацию полей.
Это пока невозможно. В качестве обходного пути вы можете создать свой собственный график в своем собственном коде (например, matplotlib), а затем записать его в SummaryProto
( core/framework/summary.proto
) и добавить в свой FileWriter
. Затем ваш собственный график появится на вкладке изображения TensorBoard.
TensorBoard использует выборку резервуара для понижения дискретизации ваших данных, чтобы их можно было загрузить в ОЗУ. Вы можете изменить количество элементов, которые он будет хранить для каждого тега, используя аргумент командной строки --samples_per_plugin
(например: --samples_per_plugin=scalars=500,images=20
). Дополнительную информацию см. в этом вопросе о переполнении стека.
Версии TensorBoard до TensorBoard 2.0 по умолчанию будут работать на хосте 0.0.0.0
, который является общедоступным. Для этих версий TensorBoard вы можете остановить всплывающие окна, указав --host localhost
при запуске.
В TensorBoard 2.0 и более поздних версиях по умолчанию используется --host localhost
. Используйте --bind_all
, чтобы восстановить старое поведение обслуживания общедоступной сети как на IPv4, так и на IPv6.
tensorboard
без установки TensorFlow?TensorBoard 1.14+ можно запустить с ограниченным набором функций, если у вас не установлен TensorFlow. Основное ограничение заключается в том, что начиная с версии 1.14 поддерживаются только следующие плагины: скаляры, пользовательские скаляры, изображение, аудио, график, проектор (частичный), распределения, гистограммы, текст, PR-кривые, сетка. Кроме того, в Google Cloud Storage нет поддержки каталогов журналов.
См. DEVELOPMENT.md.
Сначала попробуйте поискать наши проблемы на GitHub и Stack Overflow. Возможно, у кого-то другого уже возникала такая же проблема или вопрос.
Общие вопросы по использованию (или проблемы, которые могут быть специфичны для вашей локальной настройки) следует задавать в разделе «Переполнение стека».
Если вы обнаружили ошибку в TensorBoard, отправьте сообщение о проблеме на GitHub, указав как можно больше вспомогательной информации (например, прикрепив файлы событий, включая выходные данные tensorboard --inspect
и т. д.).