Оптимальный способ сохранить модель кераса для экономии места

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

Когда я сохранил модель методом model.save() в keras, размер выходного файла (в формате .h5) составлял около 200 МБ.

Мне нужно вставить этот код в github, но мы не можем загрузить файл размером более 100 МБ.

Итак, есть ли способ сохранить модель в файле меньшего размера.

Примечание: мне нужна модель только для прогнозирования.


person Akash Chandra    schedule 11.03.2018    source источник
comment
Возможно, использование h5py с соответствующими фильтрами сжатия или этот gist.github.com/lukedeo/d1899f011ae41b26fb6e поможет ?   -  person max9111    schedule 12.03.2018


Ответы (2)


В документах есть ваше решение. . save оптимален, но позволяет легко сохранять и загружать все состояние для непрерывной работы. Вам нужно гораздо меньше, если я правильно понимаю:

Сохранение / загрузка только архитектуры модели

json_string = model.to_json()
yaml_string = model.to_yaml()

Сохранение / загрузка только веса модели

model.save_weights('my_model_weights.h5')

Я думаю, что оба они намного компактнее, чем вся рабочая зона. Вы можете использовать их для воссоздания модели позже, как указано в документации (load_weights, load_from_json и т. Д.).

person kabanus    schedule 11.03.2018
comment
Я не могу воссоздать модель позже, осталась только работа по прогнозированию. Так что model.to_json лучше, чем model.save - person Akash Chandra; 11.03.2018
comment
@AkashChandra Я не уверен, что вы имеете в виду, но model = model_from_json(json_string) воссоздаст модель, чтобы вы могли ее использовать. Это все в документации. - person kabanus; 11.03.2018
comment
Мне плохо, извините с моей стороны. Я перефразирую свой вопрос, какую функцию следует использовать model.to_json или model.save, т.е. какой формат лучше .h5 или . json с точки зрения пространства. - person Akash Chandra; 11.03.2018
comment
json, точно - Это был ваш вопрос, и я ответил, не нужно перепроверять. Используя вышеизложенное, вы экономите намного меньше, чем с save, поэтому вам нужно намного меньше места. - person kabanus; 11.03.2018
comment
Но если вы хотите использовать эту обученную модель для прогнозирования, вам также необходимо сохранить веса. По моему опыту, веса - это наиболее тяжелая часть модели. - person KiraMichiru; 11.03.2018
comment
@KiraMichiru Я думаю, что это все еще значительно меньше, чем обычное сохранение. - person kabanus; 11.03.2018
comment
перейдите по ссылке , это дает оптимальный способ сохранить модель т.е. сначала сохранить модель в формате JSON, а затем сохранить ее вес. - person Akash Chandra; 12.03.2018
comment
@kabanus, беда я ссылку пропустил. - person Akash Chandra; 12.03.2018

Я не знаю, как сохранить такую ​​модель, используя значительно меньше места.

Однако, если ваша проблема заключается не в размере самого файла, а в ограничении размера загружаемого файла, вы можете попытаться разделить файл на несколько частей, которые меньше этого ограничения, и загрузить те, например с помощью 7-Zip. См. по этой ссылке можно узнать, как разделить файл.

person KiraMichiru    schedule 11.03.2018
comment
Спасибо, моя проблема заключалась в ограничении размера загружаемого файла в GitHub, поскольку GitHub не позволяет загружать файлы размером более 100 МБ. Поэтому я уменьшаю размер, сохраняя модель в формате, указанном на этом сайте < / а>. - person Akash Chandra; 12.03.2018
comment
вы не хотите, чтобы ваши модели были на git. попробуйте такие инструменты, как dvc, если вы хотите их версию - person Jan Kislinger; 11.02.2020