web-dev-qa-db-fra.com

Comment exporter un modèle Estimator avec la fonction export_savedmodel

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

15
Yuwen Yan

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

8
ursak

Vous avez 2 options:

Exportez votre modèle pour travailler avec les dictionnaires JSON

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)

Exportez votre modèle pour travailler avec des exemples Tensorflow

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)
2
Fematich

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

2

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

0
sudharsan tk