При попытке экспортировать модель Keras в качестве оценщика TensorFlow с целью обслуживания модели я столкнулся со следующей проблемой.Поскольку та же самая проблема также появилась в ответе на этот вопрос , я проиллюстрирую, что происходит на игрушечном примере, и предоставлю мое решение для обхода проблемы в целях документирования.Такое поведение происходит с Tensorflow 1.12.0 и Keras 2.2.4.Это происходит как с настоящими Keras, так и с tf.keras
.
Проблема возникает при попытке экспортировать Оценщик, созданный из модели Keras с tf.keras.estimator.model_to_estimator
.При вызове estimator.export_savedmodel
выдается либо NotFoundError
, либо ValueError
.
Код ниже воспроизводит это для примера с игрушкой.
Создайте модель Keras и сохраните ее:
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')
Затем преобразуйте модель в оценщик с помощью tf.keras.estimator.model_to_estimator
, добавьте функцию приемника ввода и экспортируйте ее в формате Savedmodel
с помощью estimator.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())
Thisскинет:
ValueError: Couldn't find trained model at ./tf.