Обратный вызов Tensorboard с keras fit_generator, у 'Function' нет атрибута 'fetch_callbacks' - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь запустить модель, используя fit_generator keras с tensorboard_callback для профилирования определенной c эпохи. Я запускаю следующий код для генератора:

def gen(source):
loopable = iter(source)
for batch in loopable:
    yield (batch[0], batch[1])

В основном учебном скрипте я создаю экземпляр генератора и использую модель с обратным вызовом тензорной доски следующим образом:

train_gen = gen(train_datasource)
log_dir="logs/profile/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1, profile_batch = 3)
m.fit_generator(train_gen, epochs=5, steps_per_epoch=500, use_multiprocessing=True, workers=32, callbacks=[tensorboard_callback])

Основная проблема, с которой я сталкиваюсь, заключается в том, что обучение всегда останавливается с ошибкой 'Function' has no attribute 'fetch_callbacks' со следующей трассировкой стека:

m.fit_generator(train_gen, epochs=5, steps_per_epoch=500, use_multiprocessing=True, workers=32, callbacks=[tensorboard_callback])
  File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1418, in fit_generator
    initial_epoch=initial_epoch)
  File "/usr/local/lib/python2.7/dist-packages/keras/engine/training_generator.py", line 177, in fit_generator
    callbacks.on_epoch_begin(epoch)
  File "/usr/local/lib/python2.7/dist-packages/keras/callbacks.py", line 65, in on_epoch_begin
    callback.on_epoch_begin(epoch, logs)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/callbacks_v1.py", line 386, in on_epoch_begin
    self.merged] = self._fetch_callback
AttributeError: 'Function' object has no attribute 'fetch_callbacks'

Я использую тензор потока 1.15, также пытался понизить до 1.14, но все еще безуспешно. Я пытаюсь тренироваться с обратным вызовом тензорной доски для отладки производительности для определенной c эпохи, отличной от первой. Но до сих пор мои попытки не смогли правильно выполнить функцию обратного вызова. Я убедился, что графический процессор работает и правильно определен.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 31 января 2020

Я использовал tf.keras функцию подгонки вместо генератора подгонки, и она работала правильно, как и ожидалось:

m.fit(x=train_gen, epochs=5, steps_per_epoch=500, use_multiprocessing=True, workers=8, callbacks=[tensorboard_callback])

...