Как использовать обратный вызов Tensorboard Keras?
Я построил нейронную сеть с Keras. Я бы визуализировал его данные с помощью Tensorboard, поэтому я использовал:
keras.callbacks.TensorBoard(log_dir='/Graph', histogram_freq=0,
write_graph=True, write_images=True)
как объяснено в keras.io. Когда я запускаю обратный вызов, я получаю <keras.callbacks.TensorBoard at 0x7f9abb3898>
, но я не получаю никаких файлов в папке "График". Что-то не так в том, как я использовал этот обратный вызов?
8 ответов
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
Надеюсь это поможет!
Вот как вы используете обратный вызов 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])
+ Изменить
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/
Если вы работаете с библиотекой 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 в вашем текущем рабочем каталоге, избегайте использования "/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: Запустите ваш код и проверьте, есть ли ваша папка графа в вашем рабочем каталоге. Если вышеуказанные коды работают правильно, у вас будет папка "Graph" в вашем рабочем каталоге.
Шаг 5: Откройте Терминал в вашем рабочем каталоге и введите команду ниже.
tensorboard --logdir ./Graph
Шаг 6: Теперь откройте веб-браузер и введите адрес ниже.
htttp://localhost:6006
После входа откроется страница Tensorbaord, где вы можете увидеть графики различных переменных.
Вот некоторый код:
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
Если вы используете 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
Создайте обратный вызов 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()
Есть несколько вещей.
Во-первых, не /Graph
но ./Graph
Во-вторых, когда вы используете обратный вызов TensorBoard, всегда передавайте данные проверки, потому что без них они не начнутся.
В-третьих, если вы хотите использовать что-либо, кроме скалярных сводок, то вам следует использовать только fit
метод, потому что fit_generator
не будет работать. Или вы можете переписать обратный вызов для работы с fit_generator
,
Чтобы добавить обратные вызовы, просто добавьте его в model.fit(..., callbacks=your_list_of_callbacks)
Вы написали log_dir='/Graph'
ты имел ввиду ./Graph
вместо? Вы отправили это /home/user/Graph
в данный момент.
Вы должны проверить Losswise ( https://losswise.com/), он имеет плагин для Keras, который проще в использовании, чем Tensorboard, и имеет несколько приятных дополнительных функций. С Losswise вы просто используете from losswise.libs import LosswiseKerasCallback
а потом callback = LosswiseKerasCallback(tag='my fancy convnet 1')
и вы готовы (см. https://docs.losswise.com/).