通常、TFグラフを使用するには、生データを数値に変換する必要があります。このプロセスを前処理ステップと呼びます。たとえば、生データが文である場合、これを行う1つの方法は、文をトークン化し、各Wordを一意の番号にマップすることです。この前処理により、モデルの入力となる各文の番号のシーケンスが作成されます。
また、モデルの出力を後処理して解釈する必要もあります。たとえば、モデルによって生成された一連の数値を単語に変換してから、文を作成します。
TF Serving は、TFモデルを提供するために最近Googleによって導入された新しいテクノロジーです。私の質問はそれです:
TensorFlowサービングを使用してTFモデルが提供される場合、前処理と後処理はどこで実行する必要がありますか?
前処理と後処理のステップをTFグラフにカプセル化する必要がありますか(例: py_fun または map_fn を使用))、または私が認識していない別のTensorFlowテクノロジーがあります。
私はここで同じ問題を抱えていますが、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)
それが役に立てば幸い。