问题
So, I've been struggling to understand what the main task of a serving_input_fn() is when a trained model is exported in Tensorflow for serving purposes. There are some examples online that explain it but I'm having problems defining it for myself.
The problem I'm trying to solve is a regression problem where I have 29 inputs and one output. Is there a template for creating a corresponding serving input function for that? What if I use a one-class classification problem? Would my serving input function need to change or can I use the same function?
And finally, do I always need serving input functions or is it only when I use tf.estimator to export my model?
回答1:
You need a serving input function if you want your model to be able to make predictions. The serving_input_fn specifies what the caller of the predict() method will have to provide. You are essentially telling the model what data it has to get from the user.
If you have 29 inputs, your serving input function might look like:
def serving_input_fn():
feature_placeholders = {
'var1' : tf.placeholder(tf.float32, [None]),
'var2' : tf.placeholder(tf.float32, [None]),
...
}
features = {
key: tf.expand_dims(tensor, -1)
for key, tensor in feature_placeholders.items()
}
return tf.estimator.export.ServingInputReceiver(features,
feature_placeholders)
This would typically come in as JSON:
{"instances": [{"var1": [23, 34], "var2": [...], ...}]}
P.S. The output is not part of the serving input function because this is about the input to predict. If you are using a pre-made estimator, the output is already predetermined. If you are writing a custom estimator, you'd write an export signature.
回答2:
If you are writing a custom Estimator, the serving input function remains the same as above. That is still the input to predict().
What changes is that you have to write a predictions dictionary for the output and specify it when creating an EstimatorSpec
Take a look at the serving input function in model.py and the sequence_regressor in task.py in this directory:
https://github.com/GoogleCloudPlatform/training-data-analyst/tree/master/courses/machine_learning/deepdive/09_sequence/sinemodel/trainer
That is an example of a custom regression model that takes N inputs and has one output.
来源:https://stackoverflow.com/questions/48510264/in-tensorflow-for-serving-a-model-what-does-the-serving-input-function-supposed