y a-t-il des tutoriels disponibles sur export_savedmodel
?
J'ai parcouru cet article sur tensorflow.org et code unittest sur github.com, et je n'ai toujours aucune idée de la façon de construire le paramètre serving_input_fn
de la fonction export_savedmodel
Fais-le comme ça:
your_feature_spec = {
"some_feature": tf.FixedLenFeature([], dtype=tf.string, default_value=""),
"some_feature": tf.VarLenFeature(dtype=tf.string),
}
def _serving_input_receiver_fn():
serialized_tf_example = tf.placeholder(dtype=tf.string, shape=None,
name='input_example_tensor')
# key (e.g. 'examples') should be same with the inputKey when you
# buid the request for prediction
receiver_tensors = {'examples': serialized_tf_example}
features = tf.parse_example(serialized_tf_example, your_feature_spec)
return tf.estimator.export.ServingInputReceiver(features, receiver_tensors)
estimator.export_savedmodel(export_dir, _serving_input_receiver_fn)
Ensuite, vous pouvez demander le modèle servi avec le nom de signature "prédire" par lot.
Source: https://www.tensorflow.org/guide/saved_model#prepare_serving_inputs
Vous avez 2 options:
Dans mon référentiel mlengine-kettleplate , je l'utilise pour exporter des modèles d'estimateur vers Cloud ML Engine pour l'utiliser facilement avec des prédictions en ligne ( exemple de code pour les prédictions ). Partie essentielle:
def serving_input_fn():
feature_placeholders = {
'id': tf.placeholder(tf.string, [None], name="id_placeholder"),
'feat': tf.placeholder(tf.float32, [None, FEAT_LEN], name="feat_placeholder"),
#label is not required since serving is only used for inference
}
return input_fn_utils.InputFnOps(
feature_placeholders,
None,
feature_placeholders)
Ce tutoriel montre comment utiliser export_savedmodel
pour servir le modèle large et profond implémenté avec des estimateurs et comment introduire des exemples Tensorflow dans le modèle exporté. La partie essentielle:
from tensorflow.contrib.learn.python.learn.utils import input_fn_utils
serving_input_fn = input_fn_utils.build_parsing_serving_input_fn(feature_spec)
si vous utilisez tensorflow directement depuis la branche principale, il existe un module tensorflow.python.estimator.export qui fournit une fonction pour cela:
from tensorflow.python.estimator.export import export
feature_spec = {'MY_FEATURE': tf.constant(2.0, shape=[1, 1])}
serving_input_fn = export.build_raw_serving_input_receiver_fn(feature_spec)
Malheureusement pour moi au moins ça n'ira pas plus loin que ça mais je ne sais pas si mon modèle est vraiment correct alors peut-être avez-vous plus de chance que moi.
Alternativement, il existe les fonctions suivantes pour la version actuelle installée à partir de pypi:
serving_input_fn = tf.contrib.learn.utils.build_parsing_serving_input_fn(feature_spec)
serving_input_fn = tf.contrib.learn.utils.build_default_serving_input_fn(feature_spec)
Mais je ne pouvais pas non plus les faire travailler.
Je ne comprends probablement pas cela correctement, alors j'espère que vous aurez plus de chance.
chris
Vous devez avoir tf.train.Example et tf.train.Feature et passer la fonction de récepteur d'entrée à entrée et appeler le modèle. Vous pouvez jeter un oeil à cet exemple https://github.com/tettusud/tensorflow-examples/tree/master/estimators