Ошибка обратного вызова Keras AttributeError: объект 'ModelCheckpoint' не имеет атрибута '_implements_train_batch_hooks' - PullRequest
3 голосов
/ 18 июня 2020

Я использую Keras (с серверной частью TensorFlow) для реализации нейронной сети и хочу сохранить только модель, которая минимизирует потери на проверке, установленной во время обучения. Для этого я создал экземпляр ModelCheckpoint и передал его при вызове метода fit модели. Однако, когда я это делаю, я получаю следующую ошибку: «AttributeError: 'ModelCheckpoint' object has no attribute '_implements_train_batch_hooks'». Самая близкая вещь, которую я нашел в Интернете для моей проблемы, - это этот пост с аналогичной ошибкой, где проблема возникла из-за смешивания модулей из keras и tf.keras, однако это не мой случай, поскольку все мои модули импортируются из keras. Я некоторое время искал онлайн и документацию Keras и не могу найти ничего, что могло бы объяснить эту ошибку. Вот части кода, которые кажутся наиболее важными для проблемы:

Импортированные модули :

from keras.models import Sequential
from keras.layers import Embedding, Conv1D, Dense, Dropout, GlobalMaxPool1D, Concatenate
from keras.callbacks import ModelCheckpoint

Создание экземпляра ModelCheckpoint, компиляция модели и вызов подходящего метода:

checkpoint = ModelCheckpoint('../model_best.h5', monitor='val_loss', verbose=1, save_best_only=True, mode='min')

model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

history = model.fit(x_train, y_train, 
                    epochs = 10, batch_size = 64,
                    validation_data = (x_val, y_val),
                    callbacks = [checkpoint])

... и вот полный Traceback:

Traceback (most recent call last):

  File "/Users/thisuser/thisrepo/classifier.py", line 39, in <module>
    callbacks = [checkpoint])

  File "/Users/thisuser/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 66, in _method_wrapper
    return method(self, *args, **kwargs)

  File "/Users/thisuser/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 826, in fit
    steps=data_handler.inferred_steps)

  File "/Users/thisuser/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow/python/keras/callbacks.py", line 231, in __init__
    cb._implements_train_batch_hooks() for cb in self.callbacks)

  File "/Users/thisuser/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow/python/keras/callbacks.py", line 231, in <genexpr>
    cb._implements_train_batch_hooks() for cb in self.callbacks)

AttributeError: 'ModelCheckpoint' object has no attribute '_implements_train_batch_hooks'

Я использую следующие версии:

  • Python: 3.7.7
  • Keras: 2.3.0-tf

Кто-нибудь знает, что может вызвать проблему? При необходимости я могу немного изменить свой код, чтобы все было здесь, чтобы его можно было воспроизводить. Заранее благодарим за помощь!

1 Ответ

1 голос
/ 19 июня 2020

Я также недавно столкнулся с этой проблемой.

Что я узнал: недавно разработчики обновили версию keras или tensorflow, и это вызвало проблему.

Решение: поскольку разработчики keras требует, чтобы все переключились на версию tf.keras, вам необходимо заменить свой код раздел импорта .

From:

import keras

To:

import tensorflow.keras as keras

После этого у меня все заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...