Ошибка при использовании tf.saved_model.simple_save()

#python #tensorflow #server #keras

#python #тензорный поток #сервер #keras

Вопрос:

Я пытаюсь разместить модель классификации изображений на своем компьютере, я пытался реализовать шаги, приведенные в этой статье, для моделей ml, обслуживающих среду

Фрагмент кода, который я использовал, является :

 import tensorflow as tf


# The export path contains the name and the version of the model
tf.keras.backend.set_learning_phase(0) # Ignore dropout at inference
model = tf.keras.models.load_model('./model_new.hdf5')
export_path = './model/1'

# Fetch the Keras session and save the model
# The signature definition is defined by the input and output tensors
# And stored with the default serving key
with tf.keras.backend.get_session() as sess:
    tf.saved_model.simple_save(
       sess,
       export_path,
       inputs={'input_image': model.input},
       outputs={t.name:t for t in model.outputs})
  

как указано в статье выше. Моя модель сохранена в файле model_new.hdf5, но я получаю следующее сообщение об ошибке.

Ошибка имени: имя ‘tf’ не определено

в строке

модель = tf.keras.models.load_model(‘./model_new.hdf5’)

правильно ли это использовать tf.saved_model.simple_save() ?

Ответ №1:

Это ошибка при загрузке вашей модели, а не с tf.saved_model.simple_save() . При загрузке модели Keras вам необходимо обрабатывать пользовательские объекты или пользовательские слои. Вы можете сделать это, передав custom_objects dict, который содержит tf в вашем случае:

 import tensorflow as tf
model = keras.models.load_model('model_new.hdf5', custom_objects={'tf': tf})
  

Комментарии:

1. Спасибо за вашу помощь, но я получаю новую ошибку RuntimeError: попытка использовать закрытый сеанс. в той же строке.

2. Это может быть проблемой, если вы запускали код несколько раз. Попробуйте вызвать K.clear_session() в начале.

3. K.clear_session() не сработал, выдал ту же ошибку, в моей модели я использую слой ctc, и это сохраненный файл hdf5. может ли быть проблема из-за этого?

4. Я не вижу никаких проблем с вашим кодом. У вас есть минимально воспроизводимый пример кода, который я могу попробовать?