Сохранение и загрузка модели Keras: ValueError: Не удалось найти подходящую функцию для вызова, загруженную из SavedModel - PullRequest
0 голосов
/ 27 марта 2020

Информация о системе. Написал пользовательский код: Да. Платформа и распространение ОС: Windows 10. Мобильное устройство: Нет. TensorFlow установлено: conda install tenorflow Версия TensorFlow: 2.1.0 (только ЦП) Python версия: 3 Опишите текущую версию Поведение Я тренирую модель TF Keras (краткое описание ниже) и использую ее для классификации слотов, и она отлично работает.

Затем я сохраняю ее, используя: tf.saved_model.save(joint_model, 'BERT2.tf') Затем загружаю модель: bertmodel = tf.keras.models.load_model('BERT2.tf', compile=False) Она компилируется с использованием те же аргументы, что и в сохраненной модели. А затем попробуйте выполнить предсказания, используя ту же функцию, что и раньше, но я получаю следующую ошибку: ValueError: Не удалось найти подходящую функцию для вызова, загруженную из SavedModel

Опишите ожидаемое поведение, которое я запускаю для предсказания, используя ту же функцию, но загруженную модель выдает ошибку. Я попытался установить ночную сборку tenorflow, но безуспешно.

Автономный код для воспроизведения проблемы Предоставьте воспроизводимый контрольный пример, необходимый для создания проблемы. Если возможно, поделитесь ссылкой на Colab / Jupyter / любой блокнот. Модель:

Обучение:

joint_model.compile(optimizer=opt, loss=losses, metrics=metrics)
history = joint_model.fit(encoded_train, slot_train, epochs=15, batch_size=32)

Function for predictions:

def show_predictions(text, tokenizer, model, slot_names):

Другая информация / журналы Включите любые журналы или исходный код, которые будут полезны для диагностики проблемы. Если вы включили трассировку, пожалуйста, включите полную трассировку. Большие журналы и файлы должны быть прикреплены.

ValueError: Could not find matching function to call loaded from the SavedModel. Got:
  Positional arguments (1 total):
    * Tensor("inputs:0", shape=(1, 8), dtype=int32)
  Keyword arguments: {'training': False}

Expected these arguments to match one of the following 4 option(s):

Option 1:
  Positional arguments (1 total):
    * {'attention_masks': TensorSpec(shape=(None, 25), dtype=tf.int32, name='inputs/attention_masks'), 'input_ids': TensorSpec(shape=(None, 25), dtype=tf.int32, name='inputs/input_ids')}
  Keyword arguments: {'training': False}

Option 2:
  Positional arguments (1 total):
    * {'attention_masks': TensorSpec(shape=(None, 25), dtype=tf.int32, name='attention_masks'), 'input_ids': TensorSpec(shape=(None, 25), dtype=tf.int32, name='input_ids')}
  Keyword arguments: {'training': False}

Option 3:
  Positional arguments (1 total):
    * {'attention_masks': TensorSpec(shape=(None, 25), dtype=tf.int32, name='inputs/attention_masks'), 'input_ids': TensorSpec(shape=(None, 25), dtype=tf.int32, name='inputs/input_ids')}
  Keyword arguments: {'training': True}

Option 4:
  Positional arguments (1 total):
    * {'attention_masks': TensorSpec(shape=(None, 25), dtype=tf.int32, name='attention_masks'), 'input_ids': TensorSpec(shape=(None, 25), dtype=tf.int32, name='input_ids')}
  Keyword arguments: {'training': True}

1 Ответ

0 голосов
/ 29 марта 2020

Я изменил способ сохранения и загрузки модели, как это было предложено кем-то на форумах TF. Вместо model.save () я сохранил веса, а затем загрузил модель в соответствии с указаниями в Части II-подхода 1 здесь: https://www.tensorflow.org/guide/keras/save_and_serialize. Кажется, сейчас работает.

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