Урок за TensorBoard: Визуализация на графики в TensorFlow

⚡ Умно обобщение

TensorBoard е визуалният интерфейс за тренировки на TensorFlow, изобразяващ криви на загуби, графики на модели, хистограми на теглото и вграждания. Това ръководство записва файлове със събития с помощта на оценител, след което отваря таблото за управление на порт 6006.

  • 🔘 Пет табла за управление: Скаларите, графиките, разпределенията, хистограмите и проекторите отчитат различен тип обобщение.
  • ☑️ Директория на лог файловете: Аргументът model_dir определя къде TensorFlow записва файловете events.out.tfevents.
  • Команда за стартиране: Изпълнете tensorboard –logdir=PATH, след което отворете http://localhost:6006 във всеки браузър.
  • 🧪 Скорост на обучение: Назъбената крива на загубите сигнализира за твърде висок процент, за да може моделът да се сближи.
  • 🛠️ ТензорФлоу 2: Обратното извикване на Keras TensorBoard замества регистрирането на оценката, показано в оригиналния пример.
  • ⚠️ Отстраняване на неизправности: Празно табло за управление почти винаги означава, че пътят до директорията на лог файловете не съвпада с обучителното изпълнение.

Урок за TensorBoard: Визуализация на графики в TensorFlow

Какво е TensorBoard?

TensorBoard е интерфейсът, използван за визуализиране на графиката и други инструменти за разбиране, отстраняване на грешки и оптимизиране на модела. Това е инструмент, който предоставя измервания и визуализации за работен процес на машинно обучение. Той помага track показатели като загуба и точност, визуализиране на графа на модела и проектиране на вграждания в по-нискоразмерни пространства.

TensorBoard се доставя с TensorFlow и работи като малък локален уеб сървър, който чете файловете със събития, които обучителната задача записва на диск.

Визуализация на графика на TensorFlow с помощта на пример за TensorBoard

Изображението по-долу е от графиката на TensorBoard, която ще генерирате в този урок. Това е основният панел:

Таблото за управление на TensorBoard Scalars, показващо кривата на average_loss на обучения DNN регресор

От снимката по-долу можете да видите панела за визуализация на графиката на TensorBoard. Панелът съдържа различни раздели, които са свързани с нивото на информация, което добавяте, когато изпълнявате модела.

Навигационна лента на TensorBoard с разделите „Скалари“, „Графики“, „Разпределения“, „Хистограми“ и „Проектор“

  • Скалари: Покажете различна полезна информация по време на обучението на модела
  • Графики: Покажете модела
  • Хистограма: Показване на теглата с хистограма
  • Разпределение: Покажете разпределението на теглото
  • Проектор: Покажете анализ на главните компоненти и T-SNE алгоритъма. Техниката, използвана за намаляване на размерността.

По време на този урок за TensorBoard ще обучите един прост дълбоко учене модел, а графиката, която той генерира, се чете отдолу нагоре.

Ако погледнете графиката, можете да разберете как работи моделът. Номерираните значки на екранната снимка по-долу маркират тези четири етапа:

  1. Поставете данните в опашката на модела: Изпратете към модела количество данни, равно на размера на партидата, т.е. Брой подавания на данни след всяка итерация
  2. Подайте данните на тензорите
  3. Обучете модела
  4. Показване на броя на партидите по време на обучението. Запазете модела на диска.

Графика на TensorFlow в TensorBoard с номерирани възли за входната опашка, блока dnn и операцията за запазване

Основната идея зад TensorBoard е, че невронната мрежа може да се държи като черна кутия и ви е необходим инструмент, за да проверите какво има вътре в тази кутия. Мислете за TensorBoard като за фенерче за потапяне в мрежата.

Помага да се разберат зависимостите между операциите, как се изчисляват теглата, показва функцията на загубата и много друга полезна информация. Когато обедините всички тези части от информацията, имате чудесен инструмент за отстраняване на грешки и намиране на начини за подобряване на модела.

За да добиете представа колко полезна може да бъде графиката на TensorBoard, разгледайте двете криви на загубите по-долу:

Две криви на загубите на TensorBoard една до друга, сравняващи модел, който не се учи, с модел, който се сближава

Невронната мрежа решава как да свърже различните неврони и колко слоя са необходими, преди моделът да може да предскаже резултат. След като архитектурата е дефинирана, е необходимо не само да се обучи моделът, но и да се използва метрика, която измерва точността на прогнозата. Тази метрика се нарича функция на загубата и целта е да се минимизира, което просто означава, че моделът прави по-малко грешки.

Всеки алгоритъм за обучение повтаря изчислението многократно, докато загубата достигне по-плоска линия. Минимизирането на загубата изисква и скорост на обучение, която е скоростта, с която моделът се учи. Ако скоростта на обучение е твърде висока, моделът никога няма да има време да научи нищо: това е лявата диаграма, където линията се движи нагоре и надолу, защото моделът ефективно гадае. Диаграмата вдясно показва намаляването на загубата с течение на итерациите, докато кривата се изравни, което означава, че моделът е намерил решение.

TensorBoard е чудесен инструмент за визуализиране на подобни показатели и открояване на потенциални проблеми. Невронната мрежа може да отнеме часове или седмици, преди да намери решение, а TensorBoard обновява показателите, докато задачата все още се изпълнява. Следователно не е нужно да чакате до края, за да видите дали моделът се обучава правилно: отворете TensorBoard, проверете как върви обучението и направете съответната промяна, ако е необходимо.

Как да използваме TensorBoard?

В този раздел ще научите как да отворите TensorBoard от терминала на macOS и от командния ред нататък WindowsФокусът тук е върху инструмента, а не върху модела, така че кодът за обучение е умишлено кратък.

Първо, трябва да импортирате библиотеките, които ще използвате по време на обучението.

## Import the library
import tensorflow as tf
import numpy as np

Вие създавате данните. Това е масив от 10000 реда и 5 колони.

X_train = (np.random.sample((10000,5)))
y_train =  (np.random.sample((10000,1)))
X_train.shape

Продукция

(10000, 5)

Кодът по-долу трансформира данните и създава модела.

Обърнете внимание, че скоростта на обучение е равна на 0.1. Ако промените тази скорост на по-висока стойност, моделът няма да намери решение. Това се случи от лявата страна на картинката по-горе.

Примерът използва TensorFlow estimator, API от високо ниво, който обгръща математическите изчисления. Estimators принадлежат към TensorFlow 1.x API, така че двата фрагмента по-долу се изпълняват под 1.x инсталация или чрез tf.compat.v1 пространство от имена.

За да създадете лог файловете, трябва да укажете пътя. Това се прави с аргумента model_dir.

В примера с TensorBoard по-долу, съхранявате модела в работната директория, т.е. там, където съхранявате бележника или Python файл. В този път, TensorFlow ще създаде папка, наречена train, с дъщерна папка, наречена linreg.

feature_columns = [
      tf.feature_column.numeric_column('x', shape=X_train.shape[1:])]
DNN_reg = tf.estimator.DNNRegressor(feature_columns=feature_columns,
# Indicate where to store the log file    
     model_dir='train/linreg',    
     hidden_units=[500, 300],    
     optimizer=tf.train.ProximalAdagradOptimizer(      
          learning_rate=0.1,      
          l1_regularization_strength=0.001    
      )
)

Продукция

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {&#x27;_model_dir': 'train/linreg', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1818e63828>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Последната стъпка от този пример за визуализация на графика с TensorFlow се състои в обучение на модела. По време на обучението, TensorFlow записва информация в директорията на модела.

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(    
     x={"x": X_train},    
     y=y_train, shuffle=False,num_epochs=None)
DNN_reg.train(train_input,steps=3000)

Продукция

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into train/linreg/model.ckpt.
INFO:tensorflow:loss = 40.060104, step = 1
INFO:tensorflow:global_step/sec: 197.061
INFO:tensorflow:loss = 10.62989, step = 101 (0.508 sec)
INFO:tensorflow:global_step/sec: 172.487
INFO:tensorflow:loss = 11.255318, step = 201 (0.584 sec)
INFO:tensorflow:global_step/sec: 193.295
INFO:tensorflow:loss = 10.604872, step = 301 (0.513 sec)
INFO:tensorflow:global_step/sec: 175.378
INFO:tensorflow:loss = 10.090343, step = 401 (0.572 sec)
INFO:tensorflow:global_step/sec: 209.737
INFO:tensorflow:loss = 10.057928, step = 501 (0.476 sec)
INFO:tensorflow:global_step/sec: 171.646
INFO:tensorflow:loss = 10.460144, step = 601 (0.583 sec)
INFO:tensorflow:global_step/sec: 192.269
INFO:tensorflow:loss = 10.529617, step = 701 (0.519 sec)
INFO:tensorflow:global_step/sec: 198.264
INFO:tensorflow:loss = 9.100082, step = 801 (0.504 sec)
INFO:tensorflow:global_step/sec: 226.842
INFO:tensorflow:loss = 10.485607, step = 901 (0.441 sec)
INFO:tensorflow:global_step/sec: 152.929
INFO:tensorflow:loss = 10.052481, step = 1001 (0.655 sec)
INFO:tensorflow:global_step/sec: 166.745
INFO:tensorflow:loss = 11.320213, step = 1101 (0.600 sec)
INFO:tensorflow:global_step/sec: 161.854
INFO:tensorflow:loss = 9.603306, step = 1201 (0.619 sec)
INFO:tensorflow:global_step/sec: 179.074
INFO:tensorflow:loss = 11.110269, step = 1301 (0.556 sec)
INFO:tensorflow:global_step/sec: 202.776
INFO:tensorflow:loss = 11.929443, step = 1401 (0.494 sec)
INFO:tensorflow:global_step/sec: 144.161
INFO:tensorflow:loss = 11.951693, step = 1501 (0.694 sec)
INFO:tensorflow:global_step/sec: 154.144
INFO:tensorflow:loss = 8.620987, step = 1601 (0.649 sec)
INFO:tensorflow:global_step/sec: 151.094
INFO:tensorflow:loss = 10.666125, step = 1701 (0.663 sec)
INFO:tensorflow:global_step/sec: 193.644
INFO:tensorflow:loss = 11.0349865, step = 1801 (0.516 sec)
INFO:tensorflow:global_step/sec: 189.707
INFO:tensorflow:loss = 9.860596, step = 1901 (0.526 sec)
INFO:tensorflow:global_step/sec: 176.423
INFO:tensorflow:loss = 10.695, step = 2001 (0.567 sec)
INFO:tensorflow:global_step/sec: 213.066
INFO:tensorflow:loss = 10.426752, step = 2101 (0.471 sec)
INFO:tensorflow:global_step/sec: 220.975
INFO:tensorflow:loss = 10.594796, step = 2201 (0.452 sec)
INFO:tensorflow:global_step/sec: 219.289
INFO:tensorflow:loss = 10.4212265, step = 2301 (0.456 sec)
INFO:tensorflow:global_step/sec: 215.123
INFO:tensorflow:loss = 9.668612, step = 2401 (0.465 sec)
INFO:tensorflow:global_step/sec: 175.65
INFO:tensorflow:loss = 10.009649, step = 2501 (0.569 sec)
INFO:tensorflow:global_step/sec: 206.962
INFO:tensorflow:loss = 10.477722, step = 2601 (0.483 sec)
INFO:tensorflow:global_step/sec: 229.627
INFO:tensorflow:loss = 9.877638, step = 2701 (0.435 sec)
INFO:tensorflow:global_step/sec: 195.792
INFO:tensorflow:loss = 10.274586, step = 2801 (0.512 sec)
INFO:tensorflow:global_step/sec: 176.803
INFO:tensorflow:loss = 10.061047, step = 2901 (0.566 sec)
INFO:tensorflow:Saving checkpoints for 3000 into train/linreg/model.ckpt.
INFO:tensorflow:Loss for final step: 10.73032.

<tensorflow.python.estimator.canned.dnn.DNNRegressor at 0x1818e63630>

В TensorFlow 2 същата работа се извършва от обратното извикване на Keras TensorBoard, което записва графиката и показателите за всяка епоха без никакъв код за оценка:

logdir = "logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model.fit(train_images, train_labels, epochs=5,
          callbacks=[tensorboard_callback])

След като изпълнението приключи, директорията с лог файлове съдържа файл с контролни точки, graph.pbtxt файл и един или повече events.out.tfevents файлове — точно това, което TensorBoard чете.

За macOS Потребители

Изгледът на Finder по-долу показва новата папка train/linreg, създадена в работната директория.

macOS списък с файлове, показващ папките с логове на влака и linreg с файлове с контролни точки, събития и graph.pbtxt

За Windows Потребители

On Windows Същите файлове се появяват под пътя, който сте посочили на model_dir, както е маркирано в адресната лента.

Windows Изглед на Explorer на папката train linreg, съдържаща файлове със събития и контролни точки на TensorFlow

Същият формат на файл за събития се създава от PyTorch, така че таблото за управление не е ограничено до изпълнения на TensorFlow.

След като вече сте записали събитията в лога, можете да отворите TensorBoard. TensorBoard по подразбиране обслужва порт 6006 (Jupyter използва порт 8888). Използвайте терминала на macOS или подканата на Anaconda на Windows.

За macOS Потребители

# Different for you
cd /Users/Guru99/tuto_TF
source activate hello-tf!

Бележникът се съхранява в пътя /Потребители/Guru99/tuto_TF

За Windows Потребители

cd C:\Users\Admin\Anaconda3
activate hello-tf

Бележникът се съхранява в пътя C:\Users\Admin\Anaconda3

За да стартирате TensorBoard, изпълнете следната команда от тази директория.

За macOS Потребители

tensorboard --logdir=./train/linreg

За Windows Потребители

tensorboard --logdir=.\train\linreg

След това TensorBoard се обслужва на http://localhost:6006

Флаг Какво контролира
--logdir Директория, съдържаща файловете със събития. Това е единственият задължителен флаг.
--port Порт за обслужване. Стойността по подразбиране е 6006; променете я, когато по-ранна сесия все още поддържа този порт.
--bind_all Обслужва се на всеки мрежов интерфейс. TensorBoard се свързва само с localhost по подразбиране, така че отдалеченият достъп се нуждае от този флаг и той не може да се комбинира с --host.
--reload_interval Колко често, в секунди, директорията с лог файлове се сканира повторно за нови данни.
--logdir_spec Стар резервен вариант, приемащ няколко пътя, разделени със запетаи; --logdir вече не поддържа тази форма.

- tensorboard dev Подкомандата вече не работи: хостваната услуга TensorBoard.dev беше затворена на 1 януари 2024 г. Локалното използване не е засегнато.

На някои машини конзолата отпечатва името на хоста вместо localhost, както е показано в подканата на Anaconda по-долу. И двата адреса отварят едно и също табло за управление.

Anaconda prompt изпълнява командата tensorboard и отпечатва адреса на сървъра на порт 6006

Копирайте и поставете адреса в любимия си браузър. Трябва да видите таблото за управление на Scalars, показано по-долу.

Таблото за управление на TensorBoard Scalars се отваря в браузър, след като директорията с логове се зареди правилно

Ако вместо това видите нещо подобно:

Четене на страницата за грешка на TensorBoard Не са намерени файлове с дефиниции на графики

Това означава, че TensorBoard не може да намери лог файла. Уверете се, че посочвате cd към правилния път или проверете отново дали събитието в лога действително е създадено. Ако не е, изпълнете отново кода за обучение.

Ако искате да затворите TensorBoard, натиснете CTRL+C в прозореца на терминала.

Съвет: проверете подканата на Anaconda за текущата работна директория.

Подканата на Anaconda показва активната среда hello-tf и текущата работна директория.

На екранната снимка по-горе подканата се намира в C:\Users\Admin, така че лог файлът трябва да бъде създаден в тази папка.

Въпроси и Отговори

Привършеното изпълнение оставя индекс на контролни точки, един или повече файла model.ckpt, файл graph.pbtxt и поне един файл events.out.tfevents. TensorBoard чете само файловете със събития; контролните точки съществуват, така че обучението може да възобнови оттам, където е спряло.

Да. PyTorch изпраща резюмеWriter който излъчва същия формат на файл за събития, така че идентичната команда tensorboard –logdir рендира таблото за управление. Нищо в сървъра не се променя — само библиотеката, която генерира обобщенията.

Не. Хостваната услуга беше затворена на 1 януари 2024 г. и подкомандата tensorboard dev вече връща грешка. Споделете резултатите, като стартирате TensorBoard в бележник, например Google Colab или чрез експортиране на диаграмите като CSV или JSON.

Дайте на всяко изпълнение собствена подпапка под споделен родителски елемент, след което насочете –logdir към родителския елемент. Всяка подпапка се показва като отделно изпълнение в левия панел, а кривите се начертават по едни и същи оси с квадратче за отметка за всяка.

Графиката на ниво оператор е изгледът по подразбиране и показва как TensorFlow разбира програмата, нарисувана отдолу нагоре. Избирането на етикета keras превключва към концептуалната графика, която показва само слоевете на модела и е по-лесна за проверка спрямо вашия дизайн.

Автоматизираните сканирания произвеждат десетки изпълнения наведнъж, така че таблото за управление се превръща в инструмент за сравнение, а не в монитор за еднократно изпълнение. Плъгинът HParams регистрира всяка конфигурация заедно с нейните показатели, което ви позволява да сортирате опитите, вместо да четете криви една по една.

Копилот на GitHub бързо създава обратно извикване и шаблонен код на summary-writer. Третирайте резултата като чернова: той често смесва TensorFlow 1.x и 2.x API, така че проверете всяко име спрямо текущата документация, преди да изпълните кода.

Или не е записан файл със събития, или пътят, предаден на –logdir, не съвпада с този, използван от заданието за обучение. Уверете се, че в тази папка съществува файл events.out.tfevents и на Windows Стартирайте TensorBoard от същата буква на устройството.

Обобщете тази публикация с: