web-dev-qa-db-ja.com

TensorFlowサービングを使用してTFモデルが提供される場合、前処理と後処理のステップはどこで実行する必要がありますか?

通常、TFグラフを使用するには、生データを数値に変換する必要があります。このプロセスを前処理ステップと呼びます。たとえば、生データが文である場合、これを行う1つの方法は、文をトークン化し、各Wordを一意の番号にマップすることです。この前処理により、モデルの入力となる各文の番号のシーケンスが作成されます。

また、モデルの出力を後処理して解釈する必要もあります。たとえば、モデルによって生成された一連の数値を単語に変換してから、文を作成します。

TF Serving は、TFモデルを提供するために最近Googleによって導入された新しいテクノロジーです。私の質問はそれです:

TensorFlowサービングを使用してTFモデルが提供される場合、前処理と後処理はどこで実行する必要がありますか?

前処理と後処理のステップをTFグラフにカプセル化する必要がありますか(例: py_fun または map_fn を使用))、または私が認識していない別のTensorFlowテクノロジーがあります。

38
MajidL

私はここで同じ問題を抱えていますが、wordDict変数の使用方法についてまだ100%確信が持てない場合でも(IDを使用して単語をマッピングするためにも使用すると思います)、メインの前処理と投稿-プロセス関数はここで定義されています:

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

なので export_outputsおよびserving_input_receiver_fn

  • exports_outputs

推定量を使用している場合は、EstimatorSpecで定義する必要があります。これは分類アルゴリズムの例です

  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

トレーニング済みの推定モデルをエクスポートする前に定義する必要があります。入力は生の文字列であると想定し、そこから入力を解析します。独自の関数を記述できますが、外部変数を使用できるときはいつでもわかりません。次に、分類アルゴリズムの簡単な例を示します。

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)

それが役に立てば幸い。

4
andresbravog