In Tensorflow for serving a model, what does the serving input function supposed to do exactly

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.


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.