Exportar un modelo de Keras como un Estimador de TF: no se puede encontrar un modelo entrenado

Encontré el siguiente problema al intentar exportar un modelo de Keras como un Estimador de TensorFlow con el propósito de servir el modelo. Dado que el mismo problema también aparecióen una respuesta a esta pregunta, Ilustraré lo que sucede en un ejemplo de juguete y proporcionaré mi solución alternativa para fines de documentación. Este comportamiento se produce con Tensorflow 1.12.0 y Keras 2.2.4. Esto sucede con Keras reales, así como contf.keras.

El problema se produce al intentar exportar un Estimador creado a partir de un modelo de Keras contf.keras.estimator.model_to_estimator. Al llamar aestimator.export_savedmodel, ya sea unNotFoundError o unValueError es aventado

El siguiente código reproduce esto para un ejemplo de juguete.

Cree un modelo de Keras y guárdelo:

import keras
model = keras.Sequential()
model.add(keras.layers.Dense(units=1,
                                activation='sigmoid',
                                input_shape=(10, )))
model.compile(loss='binary_crossentropy', optimizer='sgd')
model.save('./model.h5')

Next, convierta el modelo en un estimador contf.keras.estimator.model_to_estimator, agregue una función de receptor de entrada y expórtela enSavedmodel formato conestimator.export_savedmodel:

# Convert keras model to TF estimator
tf_files_path = './tf'
estimator =\
    tf.keras.estimator.model_to_estimator(keras_model=model,
                                          model_dir=tf_files_path)
def serving_input_receiver_fn():
    return tf.estimator.export.build_raw_serving_input_receiver_fn(
        {model.input_names[0]: tf.placeholder(tf.float32, shape=[None, 10])})

# Export the estimator
export_path = './export'
estimator.export_savedmodel(
    export_path,
    serving_input_receiver_fn=serving_input_receiver_fn())

Esto arrojará:

ValueError: Couldn't find trained model at ./tf.

Respuestas a la pregunta(1)

Su respuesta a la pregunta