Мотивация этого вопроса заключается в том, что я сохранил модель 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
JohnnyUtah 24 Окт 2019 в 00:17
1
Вы пробовали K.get_session() после загрузки модели?
 – 
Dr. Snoopy
24 Окт 2019 в 01:19

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})

Для получения дополнительной информации см. эту статью.

Чтобы узнать о других способах, см. этот ответ на переполнение стека.

1
Tensorflow Support 27 Мар 2020 в 18:48