Ошибка с сохраненной_моделью_кли при использовании сохраненной оценки в тензорном потоке
Я работал с большой 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
Надеюсь, это поможет. Спасибо.