web-dev-qa-db-fra.com

Keras Callback AttributeError: l'objet "ModelCheckCoint" n'a aucun attribut '_implements_train_batch_hooks'

J'utilise Keras (avec le back-end Tensorflow) pour mettre en œuvre un réseau de neurones et que vous souhaitez enregistrer uniquement le modèle qui minimise la perte sur le jeu de validation lors de la formation. Pour ce faire, j'ai instancié un point de modèle et le transmettez-le lorsque vous appelez la méthode d'ajustement du modèle. Cependant, quand je le fais, je reçois l'erreur suivante: "AttributeError: 'ModelCheckpoint' object has no attribute '_implements_train_batch_hooks' ". La chose la plus proche que j'ai trouvée en ligne pour mon problème est ce post avec une erreur similaire, où le problème provient de modules de mélange de keras et tf.keras, mais ce n'est pas mon cas car tous mes modules sont importés de keras. J'ai cherché en ligne et à travers la documentation Keras pendant un moment et je ne trouve rien qui pourrait expliquer ce bogue. Voici les parties du code qui semblent les plus pertinentes pour la question:

Modules importés :

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

InstanciationCheckPoint de modèle, compilation de modèle et appel à la méthode d'adaptation:

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])

... et voici la réticence complète:

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'

Les versions que j'utilise sont:

  • Python: 3.7.7
  • Keras: 2.3.0-TF

Est-ce que quelqu'un sait ce qui pourrait causer le problème? Si nécessaire, je peux modifier mon code légèrement pour tout donner ici, de sorte qu'il soit reproductible. Merci d'avance pour votre aide!

5
Sanda Achard

J'ai aussi rencontré ce problème récemment.

Qu'est-ce que j'ai trouvé: récemment la version Keras ou Tensorflow était mise à jour par les développeurs et cela cause le problème.

Solution: Étant donné que les développeurs de Keras exigent que tout le monde passe à la version Tf.keras, vous devez remplacer la section d'importation de votre code .

De:

import keras

À:

import tensorflow.keras as keras

Après cela, tout a fonctionné pour moi.

7
maximusend