Мотивация этого вопроса заключается в том, что я сохранил модель Keras, используя MaskRCNN от Matterport, и в tf.keras.callbacks.ModelCheckpoint()
очень явно установил аргумент save_weights_only
в значение False, чтобы вся модель была сохранена (а не только веса). ).
Оказывается, в обратном вызове ModelCheckpoint() есть ошибка, из-за которой иногда не сохраняется полная модель.
Очевидно, что это проблема, когда вы загружаете модель после закрытия сеанса TF, так как график, архитектура и состояние оптимизатора исчезли, что затрудняет (если не делает невозможным) повторную загрузку этой сохраненной модели.
Поэтому я спрашиваю, возможно ли как-то извлечь сеанс TF задним числом, только из файла весов .h5
, после закрытия сеанса (в результате, например, сбоя ядра вашего ноутбука).
Не так много кода, но вот он:
Учитывая файл .h5
, который сохранялся после каждой эпохи обучения модели в Keras, можно ли извлечь сеанс Graph из этого файла .h5, и если да, то как?
У меня есть несколько моделей, сохраненных в формате .h5
, но я никогда не вызывал tf.get_session() во время сохранения весов моделей в формате h5.
with tf.session() as sess:
Как загрузить эту модель с помощью Tensorflow
TF 2.0 упрощает эту задачу, но как решить эту проблему в Tensorflow версии 1.14?
Конечная цель этого — взять модель, сохраненную с помощью Keras, в виде файла .h5 и сделать с ней вывод на Tensorflow Serving, для которого, насколько мне известно, нужен файл protobuf в формате .pb
.
https://medium.com/@pipidog/how-to-convert-your-keras-models-to-tensorflow-e471400b886a
Я пробовал keras_to_tensorflow: https://github.com/amir-abdi/keras_to_tensorflow
1 ответ
Ниже показан код для преобразования ModelCheckPoint
, сохраненного в формате .h5
, в формат .pb
:
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.h5')
export_path = './PlanetModel/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})
Для получения дополнительной информации см. эту статью а>.
Чтобы узнать о других способах, см. этот ответ на переполнение стека.
Похожие вопросы
Связанные вопросы
Новые вопросы
docker
По вопросам создания и запуска контейнеров Docker. ВОПРОСЫ ПО DOCKER ДОЛЖНЫ ОТНОСИТЬСЯ К РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ. Подходящие темы включают Dockerfiles, Docker Compose и архитектуру. Как правило, если ваш вопрос о том, что происходит внутри контейнера, он, вероятно, здесь по теме; если это вне контейнера, это, вероятно, не по теме.