ServingInputReceiver
, который вы создаете для экспорта модели, указывает сохраненной модели ожидать сериализованных tf.Example
протосов вместо необработанных строк, которые вы хотите классифицировать.
С Документация по сохранению и восстановлению :
Типичным шаблоном является то, что запросы на вывод поступают в форме сериализованных tf.Examples, поэтому serve_input_receiver_fn () создает заполнитель из одной строки для их получения. Затем serve_input_receiver_fn () также отвечает за анализ tf.Examples путем добавления операции tf.parse_example к графу.
....
Вспомогательная функция tf.estimator.export.build_parsing_serving_input_receiver_fn обеспечивает этот входной приемник для общего случая.
Таким образом, ваша экспортируемая модель содержит tf.parse_example
оп, который ожидает получения сериализованных tf.Example
протосов, удовлетворяющих спецификации функции, которую вы передали build_parsing_serving_input_receiver_fn
, т.е. в вашем случае это ожидает сериализованных примеров , которые имеют функцию sentence
. Чтобы предсказать с помощью модели, вы должны предоставить эти сериализованные прототипы.
К счастью, Tensorflow позволяет довольно легко их построить. Вот одна из возможных функций для возврата выражения, сопоставляющего клавишу ввода examples
, с набором строк, которые затем можно передать в CLI:
import tensorflow as tf
def serialize_example_string(strings):
serialized_examples = []
for s in strings:
try:
value = [bytes(s, "utf-8")]
except TypeError: # python 2
value = [bytes(s)]
example = tf.train.Example(
features=tf.train.Features(
feature={
"sentence": tf.train.Feature(bytes_list=tf.train.BytesList(value=value))
}
)
)
serialized_examples.append(example.SerializeToString())
return "examples=" + repr(serialized_examples).replace("'", "\"")
Итак, используя несколько строк, взятых из ваших примеров:
strings = ["klassifiziere mich bitte",
"Das Paket „S Line Competition“ umfasst unter anderem optische Details, eine neue Farbe (Turboblau), 19-Zöller und LED-Lampen.",
"(pro Stimme geht 1 Euro Spende von Pfuscher ans Forum) ah du sack, also so gehts ja net :D:D:D"]
print (serialize_example_string(strings))
команда CLI будет:
saved_model_cli run --dir /path/to/model --tag_set serve --signature_def predict --input_exprs='examples=[b"\n*\n(\n\x08sentence\x12\x1c\n\x1a\n\x18klassifiziere mich bitte", b"\n\x98\x01\n\x95\x01\n\x08sentence\x12\x88\x01\n\x85\x01\n\x82\x01Das Paket \xe2\x80\x9eS Line Competition\xe2\x80\x9c umfasst unter anderem optische Details, eine neue Farbe (Turboblau), 19-Z\xc3\xb6ller und LED-Lampen.", b"\np\nn\n\x08sentence\x12b\n`\n^(pro Stimme geht 1 Euro Spende von Pfuscher ans Forum) ah du sack, also so gehts ja net :D:D:D"]'
, который должен дать вам желаемый результат:
Result for output key class_ids:
[[0]
[1]
[0]]
Result for output key classes:
[[b'0']
[b'1']
[b'0']]
Result for output key logistic:
[[0.05852016]
[0.88453305]
[0.04373989]]
Result for output key logits:
[[-2.7780817]
[ 2.0360758]
[-3.0847695]]
Result for output key probabilities:
[[0.94147986 0.05852016]
[0.11546692 0.88453305]
[0.9562601 0.04373989]]