2017-07-13 5 views
1

私はTensorFlow Servingクライアントをデータベースサーバー内に置くC++で記述しており、TensorFlowモデルをデータベースプロシージャとして利用できます。機械全体は、TensorFlow ServingモデルサーバからGetModelMetaData要求/応答メカニズムを介して取得した応答に基づいて、データベーステーブルと入力および出力テンソルとの間のデータタイプおよび必要な変換を自動設定します。Tensorflow Serving:GetModelMetaDataとtf.example入力ノードの自動設定

これまでは、さまざまなモデル(Inception_v3、さまざまな回帰モデル)と対話するために、「生の」入力テンソルを使用しました。 「生」とは、入力テンソルの値が、tf.exampleレコードとしてラップされた値とは対照的に、モデルによって要求されたプレーンなデータ型であることを意味します。

例として、TensorFlow Servingの例のセクションの「half_plus_two」モデルを見てください。それは "x"浮動小数点入力を期待し、 "y"浮動小数点出力を返します。 (GetModelMetaData応答から抜粋):これは「serving_default」シグネチャの「生の」入力モード、ならびに「classify_x_to_y」シグネチャ内の1つの「ラップ」の両方を備えてい

Model Metadata: 
model_spec { 
    name: "multisig" 
    version { 
    value: 1 
    } 
} 
metadata { 
    key: "signature_def" 
    value { 
    [type.googleapis.com/tensorflow.serving.SignatureDefMap] { 
     signature_def { 
     key: "classify_x_to_y" 
     value { 
      inputs { 
      key: "inputs" 
      value { 
       name: "tf_example:0" 
       dtype: DT_STRING 
       tensor_shape { 
       unknown_rank: true 
       } 
      } 
      } 
      outputs { 
      key: "scores" 
      value { 
       name: "y:0" 
       dtype: DT_FLOAT 
       tensor_shape { 
       dim { 
        size: -1 
       } 
       dim { 
        size: 1 
       } 
       } 
      } 
      } 
      method_name: "tensorflow/serving/classify" 
     } 
     } 
     signature_def { 
     key: "serving_default" 
     value { 
      inputs { 
      key: "x" 
      value { 
       name: "x:0" 
       dtype: DT_FLOAT 
       tensor_shape { 
       dim { 
        size: -1 
       } 
       dim { 
        size: 1 
       } 
       } 
      } 
      } 
      outputs { 
      key: "y" 
      value { 
       name: "y:0" 
       dtype: DT_FLOAT 
       tensor_shape { 
       dim { 
        size: -1 
       } 
       dim { 
        size: 1 
       } 
       } 
      } 
      } 
      method_name: "tensorflow/serving/predict" 
     } 
     } 
    } 
    } 
} 

Iができるが自動的に明示的に指定された "未処理の"テンソル(つまり浮動小数点数のベクトル)に対してどのようなテンソルを作成するかを推測すると、 "classify_x_to_y"署名が必要とするシリアライズされたtf.exampleレコードに何を入れるのかを判断する良い方法はありません私はもちろん、キー 'x'の下に浮動小数点値を持つtf.exampleが必要であることを知っています。疑問は、上記のGetModelMetaDataResponseから自動的に推測するものですか?

答えて

0

Tensorflo wサービスは、Classify、Regress and Predict(https://github.com/tensorflow/serving/blob/master/tensorflow_serving/apis/prediction_service.proto)など、さまざまな推論APIをサポートしています。 - "serving_default"シグネチャはPredict API用です(メソッド名は "tensorflow/serving/predict")。 Predict APIはテンソル指向であるため、作成するテンソルを推測することができます。 - "classify_x_to_y"署名はClassify API用です(メソッド名は "tensorflow/serving/classify")。 Classify APIはtf.Exampleを使用し、tf.Exampleにどの機能を含めるべきかを知る必要があります。モデルエクスポート(つまり、SavedModel)にアクセスできる場合は、その情報を推測することはできますが、署名だけではその情報を伝えることはできません。 - RegressはClassifyに似ています。

予測シグネチャを常にエクスポートし、推測にPredict APIのみを使用するようにモデルを制御できますか? PredictはClassifyおよびRegressよりも低レベルのAPIであり、ClassifyおよびRegress(およびそれ以上)がサポートするすべての機能をサポートする必要があります。