сохранение и загрузка точно настроенной модели классификации bert с использованием tensorflow 2.0

#nlp #tensorflow2.0 #bert-language-model

#nlp #tensorflow2.0 #bert-language-model

Вопрос:

Я пытаюсь сохранить точно настроенную модель двоичной классификации, основанную на предварительно подготовленном модуле Bert ‘uncased_L-12_H-768_A-12’. Я использую tf2.

Код настраивает структуру модели:

 bert_classifier, bert_encoder =bert.bert_models.classifier_model(bert_config, num_labels=2)
  

затем:

 # import pre-trained model structure from the check point file
checkpoint = tf.train.Checkpoint(model=bert_encoder)
checkpoint.restore(
    os.path.join(gs_folder_bert, 'bert_model.ckpt')).assert_consumed()
  

затем: я скомпилировал и подгонял модель

 bert_classifier.compile(
    optimizer=optimizer,
    loss=loss,
    metrics=metrics)

bert_classifier.fit(
      Text_train, Label_train,
      validation_data=(Text_val, Label_val),
      batch_size=32,
      epochs=1)
  

наконец: я сохранил модель в папке model, которая затем автоматически генерирует файл с именем saved_model.pb внутри

 bert_classifier.save('/content/drive/My Drive/model')

also tried this:

tf.saved_model.save(bert_classifier, export_dir='/content/drive/My Drive/omg')
  

теперь я пытаюсь загрузить модель и применить ее к тестовым данным:

 from tensorflow import keras

ttt = keras.models.load_model('/content/drive/My Drive/model')

  

Я получил:

 KeyError                                  Traceback (most recent call last)
<ipython-input-77-93f80aa585da> in <module>()
----> 1 tf.keras.models.load_model(filepath='/content/drive/My Drive/omg', custom_objects={'Transformera':bert_classifier})

9 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/saving/saved_model/load.py in _revive_graph_network(self, metadata, node_id)
    392     else:
    393       model = models_lib.Functional(
--> 394           inputs=[], outputs=[], name=config['name'])
    395 
    396     # Record this model and its layers. This will later be used to reconstruct

KeyError: 'name'
  

Это сообщение об ошибке не помогает мне с тем, что делать … пожалуйста, любезно посоветуйте.

Я также попытался сохранить модель в формате h5, но когда я ее загружаю

 ttt = keras.models.load_model('/content/drive/My Drive/model.h5')
  

Я получил эту ошибку:

 ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-36-12f76139ec24> in <module>()
----> 1 ttt = keras.models.load_model('/content/drive/My Drive/model.h5')

5 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/generic_utils.py in class_and_config_for_serialized_keras_object(config, module_objects, custom_objects, printable_module_name)
    294   cls = get_registered_object(class_name, custom_objects, module_objects)
    295   if cls is None:
--> 296     raise ValueError('Unknown '   printable_module_name   ': '   class_name)
    297 
    298   cls_config = config['config']

ValueError: Unknown layer: BertClassifier
  

Ответ №1:

Похоже, что у вас есть правильный ответ на вопрос: '/content/drive/My Drive/model' произойдет сбой из-за символа пробела.

Вы могли бы попробовать это с экранированием обратного пространства : '/content/drive/My Drive/model' .

Другой вариант, после того, как у меня возникла точно такая же проблема с сохранением и загрузкой. Помогло только сохранение весов предварительно обученной модели, а не сохранение всей модели:

Просто взгляните прямо здесь: https://keras.io/api/models/model_saving_apis /, особенно в save_weights() отношении методов load_weights() и.