#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()
и.