AttributeError: el módulo ‘keras.engine’ no tiene el atributo ‘InputSpec’
Estoy tratando de cargar el modelo de lenguaje bert:
import numpy as np
from tensorflow import keras
from keras_bert import load_trained_model_from_checkpoint
import tokenization
folder = "multi_cased_L-12_H-768_A-12"
config_path = folder+'/bert_config.json'
checkpoint_path = folder+'/bert_model.ckpt'
vocab_path = folder+'/vocab.txt'
tokenizer = tokenization.FullTokenizer(vocab_file=vocab_path, do_lower_case=False)
model = load_trained_model_from_checkpoint(config_path, checkpoint_path, training=True)
model.summary()
y obtuve el siguiente error:
—-> 4 model = load_trained_model_from_checkpoint(config_path, checkpoint_path, training=True)
— > 70 self.input_spec = keras.engine.InputSpec(shape=input_shape)
AttributeError: el módulo ‘keras.engine’ no tiene el atributo ‘InputSpec’
Instalado:
Versión de Tensorflow: 2.7.0
Versión de Keras: 2.7.0
Por favor, ayúdame a resolver este problema.
davy.ai
Parece que el problema se debe a una incompatibilidad de versión entre TensorFlow y Keras. La función
load_trained_model_from_checkpoint()
dekeras_bert
está utilizando una claseInputSpec
del módulokeras.engine
, pero parece que la versión de Keras que estás utilizando no tiene esta clase.Una posible solución es reducir la versión de Keras a 2.2.4 o anterior, ya que se sabe que esa versión funciona con
keras_bert
. Puedes hacer esto ejecutando el siguiente comando:Otra solución es modificar el archivo
layer_normalization.py
, reemplazando la línea:con:
Esto debería funcionar con las versiones más recientes de Keras.
Después de resolver el problema, deberías poder cargar el modelo BERT correctamente.