Как создать пользовательскую функцию для обратного вызова - tenorflow - PullRequest
2 голосов
/ 24 апреля 2020

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

class MyOwnFunction(tf.keras.callbacks.Callback):
  def on_epoch_end(self, epoch, logs=None):
    print('Saving after {} epoch'.format(epoch + 1))
    model.save('C:/Users/model.h5')
    with open('C:/Users/trainingHistory', 'wb') as file_pi:
        pickle.dump(history.history, file_pi)

history = model.fit(
        train_generator,
        epochs=num_epochs,
        callbacks=[MyOwnFunction()],
        validation_data=validation_generator) 

Но я получаю сообщение об ошибке:

NameError: name 'history' is not defined

1 Ответ

0 голосов
/ 25 апреля 2020

Объект, который вы связываете с history в глобальном пространстве имен, не существует, пока не вернется model.fit. Это означает, что он не находится в глобальном пространстве имен, когда fit вызывает ваш обратный вызов.

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

Наиболее вероятное решение - переместить следующее вне вашей функции в глобальное пространство имен после привязки history:

with open('C:/Users/trainingHistory', 'wb') as file_pi:
    pickle.dump(history.history, file_pi)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...