En Tensorflow para servir un modelo, ¿qué debe hacer exactamente la función de entrada de servicio?

Por lo tanto, he estado luchando para entender cuáles son las tareas principales de serving_input_fn () cuando un modelo entrenado se exporta en Tensorflow para propósitos de servicio. Hay algunos ejemplos en línea que lo explican, pero tengo problemas para definirlo yo mismo.

El problema que estoy tratando de resolver es un problema de regresión en el que tengo 29 entradas y una salida. ¿Hay una plantilla para crear una función de entrada de servicio correspondiente para eso? ¿Qué pasa si uso un problema de clasificación de una clase? ¿Debería cambiar mi función de entrada de servicio o puedo usar la misma función?

Y finalmente, ¿siempre necesito servir funciones de entrada o es solo cuando uso tf.estimator para exportar mi modelo?

Necesita una función de entrada de servicio si desea que su modelo pueda hacer predicciones. Serve_input_fn especifica lo que el que llama del método predict () tendrá que proporcionar. Básicamente, le está diciendo al modelo qué datos tiene que obtener del usuario.

Si tiene 29 entradas, su función de entrada de servicio podría verse así:

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) 

Esto normalmente vendría como JSON:

 {"instances": [{"var1": [23, 34], "var2": [...], ...}]} 

PS La salida no es parte de la función de entrada de servicio porque se trata de la entrada para predecir. Si está utilizando un estimador prefabricado, la salida ya está predeterminada. Si está escribiendo un estimador personalizado, escribiría una firma de exportación.

Si está escribiendo un Estimador personalizado, la función de entrada de servicio sigue siendo la misma que la anterior. Esa es todavía la entrada para predecir ().

Lo que cambia es que debe escribir un diccionario de predicciones para la salida y especificarlo al crear un EstimatorSpec

Eche un vistazo a la función de entrada de servicio en model.py y el sequence_regressor en task.py en este directorio:

https://github.com/GoogleCloudPlatform/training-data-analyst/tree/master/courses/machine_learning/deepdive/09_sequence/sinemodel/trainer

Este es un ejemplo de un modelo de regresión personalizado que toma N entradas y tiene una salida.