Ошибка с сохраненной_моделью_кли при использовании сохраненной оценки в тензорном потоке

Я работал с большой BERT без оболочки для классификации двоичного текста. Я использовал Google Colab для обучения модели. Для сохранения оценки я использовал следующие serving_input_funtion:

def serving_input_receiver_fn():
  with tf.variable_scope("foo"):
    feature_spec = {
      "input_ids": tf.FixedLenFeature([128], tf.int64),
      "input_mask": tf.FixedLenFeature([128], tf.int64),
      "segment_ids": tf.FixedLenFeature([128], tf.int64),
      "label_ids": tf.FixedLenFeature([], tf.int64),
    }
    serialized_tf_example = tf.placeholder(dtype=tf.string, shape=None,
                                       name='input_example_tensor')

    receiver_tensors = {'examples': serialized_tf_example}
    features = tf.parse_example(serialized_tf_example, feature_spec)
    return tf.estimator.export.ServingInputReceiver(features, receiver_tensors)

и сохранил оценку со следующим:

estimator._export_to_tpu = False
estimator.export_saved_model(export_dir_base = "/bert_0.3/",serving_input_receiver_fn = serving_input_receiver_fn)

Это спасло оценку, но теперь, когда я пытаюсь использовать saved_model_cli проверить оценщик, его не работает. Это вызывает у меня ошибку вроде:

ValueError: Type <class 'bytes'> for value b'\n\x12\n\x10\n\x08sentence\x12\x04\n\x02\n\x00' is not supported for tf.train.Feature.

Команда была:

saved_model_cli run --dir '/bert_0.3/1564572852' --tag_set serve --signature_def serving_default --input_examples '"examples"=[{"input_ids":[b"\n\x12\n\x10\n\x08sentence\x12\x04\n\x02\n\x00"],"input_mask":[b"\n-\n+\n\x08sentence\x12\x1f\n\x1d\n\x1bThis API is a little tricky"],"segment_ids":[None],"label_ids":["label_1"]}]'

Он не принимал строку напрямую, поэтому я вручную разделил ее на dict, После преобразования в dictЯ понял, что это принимает только байты для bytes_list, Вот почему я преобразовал строки в байтовый формат.

Любая помощь будет признательна, если кто-то может сказать мне, где это пошло не так. проблема может быть в serving_input_receiver_fn а я думаю.

максимальная длина последовательности 128

Благодарю.

0 ответов

Вы можете просмотреть сохраненную модель, используя следующую команду:

saved_model_cli show --all --dir <path to/bert_0.3/1564572852>

Это покажет dtype, форму и имя входов и выходов.

Попробуйте использовать tf.placeholder() вместо tf.FixedLenFeature внутри serve_input_receiver_fn() следующим образом:

input_ids = tf.placeholder(tf.int32, [None, 128], name='input_ids')
input_mask = tf.placeholder(tf.int32, [None, 128], name='input_mask')
segment_ids = tf.placeholder(tf.int32, [None, 128], name='segment_ids')

Если при использовании сохраненной модели по-прежнему возникает ошибка, поделитесь снимком экрана с ошибкой.

Вы можете обратиться к следующему репозиторию github для получения дополнительных сведений:https://github.com/bigboNed3/bert_serving/tree/44d33920da6888cf91cb72e6c7b27c7b0c7d8815

Надеюсь, это поможет. Спасибо.

Другие вопросы по тегам