Как использовать обратный вызов Tensorboard для Keras?


144

Я построил нейронную сеть с Керасом. Я бы визуализировал его данные с помощью Tensorboard, поэтому я использовал:

keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,
                            write_graph=True, write_images=True)

как объяснено в keras.io . Когда я запускаю обратный вызов, я получаю <keras.callbacks.TensorBoard at 0x7f9abb3898>, но не получаю ни одного файла в моей папке «График». Что-то не так в том, как я использовал этот обратный вызов?


3
Я хотел бы предложить установку histogram_freqна 1. «histogram_freq: частота (в эпохах) для вычисления гистограмм активации для слоев модели. Если установлено значение 0, гистограммы не будут вычисляться».
Мэтт

10
Будьте осторожны: «/ Graph» создает каталог в корневом каталоге, а «./Graph» создает каталог в рабочем каталоге.
Мэтт

@MattKleinsmith Если установлено значение 0, только гистограммы активации и веса для слоев модели не будут вычисляться с помощью данных проверки, метрики по-прежнему будут регистрироваться.
BugKiller

Я думаю, что лучше дать logdir уникальное имя. Посмотрите на stackoverflow.com/a/54949146/1179925
mrgloom 01

Ответы:


224
keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

Эта строка создает объект Callback Tensorboard, вы должны захватить этот объект и передать его fitфункции вашей модели.

tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)
...
model.fit(...inputs and parameters..., callbacks=[tbCallBack])

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

Если вы хотите визуализировать файлы, созданные во время обучения, запустите в своем терминале

tensorboard --logdir path_to_current_dir/Graph 

Надеюсь это поможет !


Я использовал это со следующей ошибкой, когда write_images = False
abdul qayyum

InvalidArgumentError (см. Выше для трассировки): тензор должен быть четырехмерным с последним размером 1, 3 или 4, а не [1,3,3,256,256,1] [[Node: conv_3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT, bad_color = Tensor <type: uint8 shape: [4] values: 255 0 0 ...>, max_images = 3, _device = "/ job: localhost / replica: 0 / task: 0 / cpu: 0"] (conv_3. 2_2 / kernel_0_1 / tag, ExpandDims_50)]]
абдул каюм

И что-то говорит о том, что заполнитель отсутствует dtype = float, когда True Any Idea?
абдул каюм

2
Вкладка Скаляры по-прежнему пуста, хотя я могу увидеть свою архитектуру модели на вкладке Графики?
iratzhash

1
это дает только скаляры для потери и точности обучения. как сделать то же самое для validation_data, который передается функции соответствия?
Утку Уфук

47

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

from keras.callbacks import TensorBoard

tensorboard = TensorBoard(log_dir='./logs', histogram_freq=0,
                          write_graph=True, write_images=False)
# define model
model.fit(X_train, Y_train,
          batch_size=batch_size,
          epochs=nb_epoch,
          validation_data=(X_test, Y_test),
          shuffle=True,
          callbacks=[tensorboard])

2
Есть ли способ лучше структурировать вывод тензорной доски? Делает ли Keras некоторую оптимизацию в этом отношении?
Nickpick

2
@nickpick Я не понимаю, о чем ты. Но я думаю, что это может быть кандидатом на другой вопрос.
Мартин Тома


важно отметить, что histogram_freq=0он устанавливается, если тензорборд не записывает гистограмму tf.summary.histogram- в противном случае histogram_freqНЕ равен 0!
Agile Bean

21

+ Изменить

keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

к

tbCallBack = keras.callbacks.TensorBoard(log_dir='Graph', histogram_freq=0,  
          write_graph=True, write_images=True)

и установите свою модель

tbCallback.set_model(model)

Запустите в своем терминале

tensorboard  --logdir Graph/

Я получил AttributeError: 'TensorBoard' object has no attribute 'set_model'.
Фабио Перес,

16

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

Шаг 1: Инициализируйте библиотеку обратного вызова keras для импорта тензорной доски, используя команду ниже

from keras.callbacks import TensorBoard

Шаг 2: Включите приведенную ниже команду в вашу программу непосредственно перед командой «model.fit ()».

tensor_board = TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)

Примечание: используйте "./graph". Он создаст папку графика в вашем текущем рабочем каталоге, избегайте использования «/ graph».

Шаг 3: Включите обратный вызов Tensorboard в "model.fit ()". Пример приведен ниже.

model.fit(X_train,y_train, batch_size=batch_size, epochs=nb_epoch, verbose=1, validation_split=0.2,callbacks=[tensor_board])

Шаг 4: Запустите свой код и проверьте, есть ли папка с графиком в вашем рабочем каталоге. если приведенные выше коды работают правильно, у вас будет папка «График» в вашем рабочем каталоге.

Шаг 5: Откройте Терминал в вашем рабочем каталоге и введите команду ниже.

tensorboard --logdir ./Graph

Шаг 6: Теперь откройте свой веб-браузер и введите адрес ниже.

http://localhost:6006

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


важно отметить, что histogram_freq=0он устанавливается, если тензорборд не записывает гистограмму tf.summary.histogram- в противном случае histogram_freqНЕ равен 0!
Agile Bean

10

Вот код:

K.set_learning_phase(1)
K.set_image_data_format('channels_last')

tb_callback = keras.callbacks.TensorBoard(
    log_dir=log_path,
    histogram_freq=2,
    write_graph=True
)
tb_callback.set_model(model)
callbacks = []
callbacks.append(tb_callback)

# Train net:
history = model.fit(
    [x_train],
    [y_train, y_train_c],
    batch_size=int(hype_space['batch_size']),
    epochs=EPOCHS,
    shuffle=True,
    verbose=1,
    callbacks=callbacks,
    validation_data=([x_test], [y_test, y_test_coarse])
).history

# Test net:
K.set_learning_phase(0)
score = model.evaluate([x_test], [y_test, y_test_coarse], verbose=0)

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

Итак, вот пример визуализации эволюции значений для последней свертки на протяжении обучения, когда-то увиденной в TensorBoard, на вкладке «гистограммы» (и я обнаружил, что вкладка «распределения» содержит очень похожие диаграммы, но перевернутые в сторону):

мониторинг весов тензорной доски

Если вы хотите увидеть полный пример в контексте, вы можете обратиться к этому проекту с открытым исходным кодом: https://github.com/Vooban/Hyperopt-Keras-CNN-CIFAR-100


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

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

Чтобы ответить «Как использовать обратный вызов TensorBoard для Keras?», Все остальные ответы являются неполными и отвечают только на небольшой контекст вопроса - например, никто не занимается встраиванием. По крайней мере, в своем ответе я задокументировал потенциальные ошибки или вещи, которых следует избегать. Думаю, я поднял важные вопросы, о которых никто даже не думает думать. Я все еще жду полного ответа. Этот обратный вызов тоже плохо документирован, как и рак.
Гийом Шевалье

5

Если вы используете google-colab, простая визуализация графика будет:

import tensorboardcolab as tb

tbc = tb.TensorBoardColab()
tensorboard = tb.TensorBoardColabCallback(tbc)


history = model.fit(x_train,# Features
                    y_train, # Target vector
                    batch_size=batch_size, # Number of observations per batch
                    epochs=epochs, # Number of epochs
                    callbacks=[early_stopping, tensorboard], # Early stopping
                    verbose=1, # Print description after each epoch
                    validation_split=0.2, #used for validation set every each epoch
                    validation_data=(x_test, y_test)) # Test data-set to evaluate the model in the end of training

3

Создайте обратный вызов Tensorboard:

from keras.callbacks import TensorBoard
from datetime import datetime
logDir = "./Graph/" + datetime.now().strftime("%Y%m%d-%H%M%S") + "/"
tb = TensorBoard(log_dir=logDir, histogram_freq=2, write_graph=True, write_images=True, write_grads=True)

Передайте обратный вызов Tensorboard в вызов fit:

history = model.fit(X_train, y_train, epochs=200, callbacks=[tb])

При запуске модели, если вы получаете ошибку Keras

"Вы должны указать значение для тензора заполнителя"

попробуйте сбросить сеанс Keras перед созданием модели, выполнив:

import keras.backend as K
K.clear_session()

Исправлена ​​проблема You must feed a value for placeholder tensor. Есть идеи, почему?
Рутвик Вайла

2

Вы написали log_dir='/Graph', вы имели ввиду ./Graphвместо этого? Вы его сейчас отправили /home/user/Graph.


1
Зачем /Graphсоздавать папку в домашнем каталоге пользователя, а не просто использовать ее /Graphнапрямую?
Майкл Миор

2

Вы должны проверить Losswise ( https://losswise.com ), у него есть плагин для Keras, который проще в использовании, чем Tensorboard, и есть несколько приятных дополнительных функций. С Losswise вы бы просто использовали, from losswise.libs import LosswiseKerasCallbackи тогда callback = LosswiseKerasCallback(tag='my fancy convnet 1')все готово (см. Https://docs.losswise.com/#keras-plugin ).


7
Отказ от ответственности: OP является основателем Losswise, который является платным продуктом (хотя и с довольно щедрым уровнем бесплатного пользования)
Майкл Майор

@MichaelMior прав, хотя это еще не платный продукт и, возможно, никогда им не станет (кроме предварительных лицензий в будущем, возможно)
nicodjimenez

2

Есть несколько вещей.

Во-первых, не /Graphно./Graph

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

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

Чтобы добавить обратные вызовы, просто добавьте его в model.fit(..., callbacks=your_list_of_callbacks)


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.