シカゴのタクシーの例と同様に、tfx パイプラインを実装しています。プッシュされたモデルの予測は を返します{"predictions": []}
。この問題をデバッグするにはどうすればよいですか?
行われた予測のログを見ることができます。しかし、空の配列を返すため、ステータス コードは 200 で、何が問題なのかについての有用な情報はありません。予測リクエスト データがエスティメータに正しく渡されていないことが予想されます。
シカゴの例では、これをサービング レシーバーとして使用していますが、これは機能します。私の例でもうまくいくはずだと思います
def _example_serving_receiver_fn(transform_output, schema):
"""Build the serving in inputs.
Args:
transform_output: directory in which the tf-transform model was written
during the preprocessing step.
schema: the schema of the input data.
Returns:
Tensorflow graph which parses examples, applying tf-transform to them.
"""
raw_feature_spec = _get_raw_feature_spec(schema)
raw_feature_spec.pop(_LABEL_KEY)
raw_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(
raw_feature_spec, default_batch_size=None)
serving_input_receiver = raw_input_fn()
transformed_features = transform_output.transform_raw_features(
serving_input_receiver.features)
return tf.estimator.export.ServingInputReceiver(
transformed_features, serving_input_receiver.receiver_tensors)
主な違いは、1 つの入力のみを期待することです。. で区切られたプログラミング言語の文字列です'|': 'java|python'
。
次に、その文字列を前処理関数で分割し、形状 500 の複数の 1 つのホット エンコードされた配列にします (正確に 500 のオプションがあります)。
また、予測が tf 変換によって正しく変換されていない場合もあります。(tf 変換は tfx パイプラインの一部であり、正しく実行されます)
リクエスト:{"instances": ["javascript|python"]}
応答:{"predictions": []}
予想される応答: {"predictions": [520]}
(その回帰モデル)