#python #tensorflow #keras #h5py
#python #тензорный поток #keras #h5py
Вопрос:
У меня есть файл .h5, который содержит только веса модели, которая была обучена с использованием Mask-RCNN и Keras framework для выполнения обнаружения объектов. Я хотел бы загрузить эту модель с помощью Tensorflow Keras на Python и запустить обнаружение объектов на пользовательских изображениях.
Я работаю с Python 3.8.5, и я попытался загрузить эту модель с помощью keras.models.load_model()
функции, но при попытке сделать это я получаю сообщение об ошибке:
Ошибка значения: модель не найдена в файле конфигурации
Я понимаю, что это означает, что файл .h5 был сохранен только с весами модели, и что для использования этих весов я должен загрузить их в модель с той же архитектурой.
Я использовал модуль python h5py для просмотра групп внутри файла .h5 в попытке понять архитектуру, но я вижу только такие ключи, как показано ниже: (Есть много, много других подобных этому, но это общий обзор ключей, которые я вижу)
«activation_1», «add_32», «bn2a_branch1», «res5c_out» и т.д.
В этих группах иногда есть элементы набора данных, которые при обращении к которым предоставляют информацию, аналогичную следующей:
<HDF5 group "/bn4v_branch2a/bn4v_branch2a" (4 members)>
<HDF5 dataset "beta:0": shape (256,), type "<f4">
<HDF5 dataset "gamma:0": shape (256,), type "<f4">
<HDF5 dataset "moving_mean:0": shape (256,), type "<f4">
<HDF5 dataset "moving_variance:0": shape (256,), type "<f4">
Я могу предположить, что некоторые вещи, такие как «activation_1», вероятно, соответствуют слоям активации, но остальные слои, похоже, не связаны с такими вещами, как слои Dense, LeakyReLU, BatchNormalization и т. Д., Которые я привык видеть / использовать при построении модели.
Что мне нужно здесь сделать? Как я могу определить архитектуру модели Keras Mask-RCNN из файла .h5 только с весами модели?
Спасибо, любая помощь приветствуется!
Комментарии:
1. Я не думаю, что это возможно в общем случае, лучше всего найти архитектуру, которая использовалась для создания весов, код должен быть где-то
2.
h5
это формат данных общего назначения.h5py
загружает свои наборы данных в видеnumpy
массивов. Любая связь между этими массивами иKeras
моделью устанавливаетсяKeras
(или кем каждый сохраненный файл). Я полагаю, что это может сохранить достаточно информации для воссоздания модели, но я не могу судить по именам наборов данных. (группа / набор данных также могут иметь атрибуты).
Ответ №1:
Вы можете найти его в ‘model_config’ атрибутов корневой группы. Просто проверьте:
f = h5py.File(your_model_name, 'r')
f.attrs.get('model_config')
Там вы найдете все классы слоев с именем, формой, функцией активации и т.д.
Ответ №2:
Попробуйте загрузить модель в другую переменную, затем вызовите функцию model.summary()
model_2 = load_model('old_model.h5')
model_2.summary()
Это должно отображать слои модели следующим образом :
Краткое описание модели
Комментарии:
1. Как объяснил автор, load_model не будет работать, поскольку исходный файл h5 был сохранен только с весами
2.
load_model(<path>)
работает только с моделями, сохраненнымиmodel.save(<path>)
Ответ №3:
Возможно, вы сможете извлечь некоторую информацию из получаемых выходных данных. Например.
<HDF5 group "/bn4v_branch2a/bn4v_branch2a" (4 members)>
<HDF5 dataset "beta:0": shape (256,), type "<f4">
<HDF5 dataset "gamma:0": shape (256,), type "<f4">
<HDF5 dataset "moving_mean:0": shape (256,), type "<f4">
<HDF5 dataset "moving_variance:0": shape (256,), type "<f4">
это уровень пакетной нормализации. Я знаю это из написания кода ручного преобразования для преобразования из pytorch в tensorflow.
Может быть, вы могли бы создать собственную тестовую сеть, извлечь веса и прочитать структуру, чтобы увидеть, как выглядят структуры с известными вам слоями, а затем сравнить с вашей неизвестной структурой модели?