¿Hay algún tutorial disponible sobre export_savedmodel ?
Revisé este artículo en tensorflow.org y el código unittest en github.com, y todavía no tengo idea de cómo construir el parámetro serving_input_fn de la función export_savedmodel
Hazlo asi:
your_feature_spec = { "some_feature": tf.FixedLenFeature([], dtype=tf.string, default_value=""), "some_feature": tf.VarLenFeature(dtype=tf.string), } def _serving_input_receiver_fn(): serialized_tf_example = tf.placeholder(dtype=tf.string, shape=None, name='input_example_tensor') # key (eg 'examples') should be same with the inputKey when you # buid the request for prediction receiver_tensors = {'examples': serialized_tf_example} features = tf.parse_example(serialized_tf_example, your_feature_spec) return tf.estimator.export.ServingInputReceiver(features, receiver_tensors) estimator.export_savedmodel(export_dir, _serving_input_receiver_fn)Luego puede solicitar el modelo servido con el nombre de firma "predecir" por lote.
Fuente: https://www.tensorflow.org/guide/saved_model#prepare_serving_inputs
si está utilizando tensorflow directamente desde la rama maestra, hay un módulo tensorflow.python.estimator.export que proporciona una función para eso:
from tensorflow.python.estimator.export import export feature_spec = {'MY_FEATURE': tf.constant(2.0, shape=[1, 1])} serving_input_fn = export.build_raw_serving_input_receiver_fn(feature_spec)Desafortunadamente, al menos para mí, no irá más allá, pero no estoy seguro de si mi modelo es realmente correcto, así que tal vez tengas más suerte que yo.
Alternativamente, existen las siguientes funciones para la versión actual instalada desde pypi:
serving_input_fn = tf.contrib.learn.utils.build_parsing_serving_input_fn(feature_spec) serving_input_fn = tf.contrib.learn.utils.build_default_serving_input_fn(feature_spec)Pero tampoco pude hacer que funcionaran.
Probablemente, no estoy entendiendo esto correctamente, así que espero que tengas más suerte.
cris
Tienes 2 opciones:
En mi repositorio mlengine-boilerplate , uso esto para exportar modelos de estimador a Cloud ML Engine para usarlo fácilmente con predicciones en línea ( código de muestra para las predicciones ). Parte esencial:
def serving_input_fn(): feature_placeholders = { 'id': tf.placeholder(tf.string, [None], name="id_placeholder"), 'feat': tf.placeholder(tf.float32, [None, FEAT_LEN], name="feat_placeholder"), #label is not required since serving is only used for inference } return input_fn_utils.InputFnOps( feature_placeholders, None, feature_placeholders) Este tutorial muestra cómo puede usar export_savedmodel para servir el modelo Wide & Deep implementado con estimadores y cómo alimentar ejemplos de Tensorflow en el modelo exportado. La parte esencial:
from tensorflow.contrib.learn.python.learn.utils import input_fn_utils serving_input_fn = input_fn_utils.build_parsing_serving_input_fn(feature_spec)