web-dev-qa-db-fra.com

Où les étapes de prétraitement et de post-traitement doivent-elles être exécutées lorsqu'un modèle TF est servi à l'aide du service TensorFlow?

En règle générale, pour utiliser un graphique TF, il est nécessaire de convertir les données brutes en valeurs numériques. J'appelle ce processus une étape de prétraitement. Par exemple, si les données brutes sont une phrase, une façon de procéder consiste à symboliser la phrase et à mapper chaque mot à un numéro unique. Ce prétraitement crée une séquence de nombres pour chaque phrase, qui sera l'entrée du modèle.

Nous devons également post-traiter la sortie d'un modèle pour l'interpréter. Par exemple, convertir une séquence de nombres générée par le modèle en mots, puis construire une phrase.

TF Serving est une nouvelle technologie récemment introduite par Google pour servir un modèle TF. Ma question est la suivante:

Où le pré-traitement et le post-traitement doivent-ils être exécutés lorsqu'un modèle TF est servi à l'aide du service TensorFlow?

Dois-je encapsuler les étapes de prétraitement et de post-traitement dans mon graphique TF (par exemple en utilisant py_fun ou map_fn ) ou il existe une autre technologie TensorFlow que je ne connais pas.

38
MajidL

Je suis sur le même problème ici, même si je ne suis pas encore sûr à 100% sur la façon d'utiliser la variable wordDict (je suppose que vous en utilisez une aussi pour mapper les mots avec ses identifiants), le pré-processus principal et le post -les fonctions de processus sont définies ici:

https://www.tensorflow.org/programmers_guide/saved_model

comme export_outputs et serving_input_receiver_fn.

  • exports_outputs

Doit être défini dans EstimatorSpec si vous utilisez des estimateurs. Voici un exemple d'algorithme de classification

  predicted_classes = tf.argmax(logits, 1)
  categories_tensor = tf.convert_to_tensor(CATEGORIES, tf.string)
  export_outputs = { "categories": export_output.ClassificationOutput(classes=categories_tensor) }
  if mode == tf.estimator.ModeKeys.PREDICT:
    return tf.estimator.EstimatorSpec(
        mode=mode,
        predictions={
            'class': predicted_classes,
            'prob': tf.nn.softmax(logits)
        },
        export_outputs=export_outputs)
  • serving_input_receiver_fn

Il doit être défini avant d'exporter le modèle d'estimateur entraîné, il suppose que l'entrée est une chaîne brute et analyse votre entrée à partir de là, vous pouvez écrire votre propre fonction mais je ne sais pas quand vous pouvez utiliser des variables externes. Voici un exemple simple pour un algorithme de classification:

def serving_input_receiver_fn():
    feature_spec = { "words": tf.FixedLenFeature(dtype=tf.int64, shape=[4]) }
    return tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)()

  export_dir = classifier.export_savedmodel(export_dir_base=args.job_dir,
                                            serving_input_receiver_fn=serving_input_receiver_fn)

j'espère que ça aide.

4
andresbravog