Як використовувати зворотний виклик Tensorboard Keras?


143

Я створив нейромережу з Керасом. Я б візуалізував його дані 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

Відповіді:


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

Цей рядок створює об'єкт тензорної дошки зворотного виклику, ви повинні захопити цей об’єкт і надати його 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 (див. Вище для простеження): Тензор повинен бути 4-D з останнім затемненням 1, 3 або 4, а не [1,3,3256,256,1] [[Вузол: conv_3.2_2 / kernel_0_1 = ImageSummary [T = DT_FLOAT, bad_color = Tensor <тип: uint8 форма: [4] значення: 255 0 0 ...>, max_images = 3, _device = "/ робота: localhost / replica: 0 / task: 0 / cpu: 0"] (conv_3 2_2 / kernel_0_1 / tag, ExpandDims_50)]]
abdul qayyum

І щось, що говорить, що в заповнювачі місця відсутній dtype = float, коли True Any Idea?
abdul qayyum

2
Вкладка Скаляри все ще порожня, хоча я бачу свою архітектуру моделі на вкладці Графіки?
іраджаш

1
це створює лише шкали для втрати та точності тренувань. як зробити те ж саме для validation_data, який передається функції fit?
Утку Уфук

46

Ось як ви використовуєте зворотний виклик 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
Чи можна краще структурувати вихід тензорної дошки? Чи робить Керас певну оптимізацію в цьому плані?
Нікпік

2
@nickpick Я не знаю, що ти маєш на увазі. Але я думаю, що це може бути кандидатом для іншого питання.
Мартін Тома


Важливо відзначити, що histogram_freq=0встановлено, якщо тензорна дошка не записує жодну гістограму за допомогою tf.summary.histogram- інакше histogram_freqНЕ дорівнює 0!
Agile Bean

20

Зміна

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'.
Фабіо Перес

15

Якщо ви працюєте з бібліотекою 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: Включити зворотний виклик тензорної дошки у "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

9

Ось код:

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?", Всі інші відповіді є неповними і відповідають лише на малий контекст питання - ніхто не займається вкладками, наприклад. Принаймні, у мене були задокументовані потенційні помилки чи речі, яких слід уникати у своїй відповіді. Я думаю, що я порушив важливі питання, про які ще ніхто не думає думати. Я все ще чекаю на повну відповідь. Цей зворотний дзвінок теж є недокументованим, як рак.
Гійом Шевальє

4

Якщо ви використовуєте google-cola, простою візуалізацією графіка було б:

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

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
Відмова: ОП є засновником Losswise, який є платним продуктом (хоча і з досить щедрим вільним рівнем)
Майкл Міор

@MichaelMior є правильним, хоча це ще не платний продукт і може ніколи не бути (окрім попередніх ліцензій у майбутньому, можливо)
nicodjimenez

2

Речей мало.

По-перше, не /Graphтак./Graph

По-друге, коли ви використовуєте зворотний виклик TensorBoard, завжди передайте дані перевірки, тому що без цього він не запускався.

По-третє, якщо ви хочете використовувати що-небудь, крім скалярних підсумків, тоді вам слід скористатися лише fitметодом, оскільки fit_generatorвін не буде працювати. Або ви можете переписати зворотний дзвінок для роботи fit_generator.

Щоб додати зворотні дзвінки, просто додайте їх до model.fit(..., callbacks=your_list_of_callbacks)


Посилання на посилання на 3-й пункт: github.com/keras-team/keras/isissue/3358#issuecomment-312531958
Лев Брюггман,

2

Створіть зворотний виклик 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 до відповідного дзвінка:

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. Будь-яка ідея чому?
Рутвік Вайла
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.