Keras — это полезный API для глубокого обучения, который также включает в себя различные предварительно обученные модели, которые можно использовать для передачи обучения. В этой статье вы сможете понять,как изменить размер ввода предварительно обученных моделей в Keras. .

Керас API

Keras — это высокоуровневый API (интерфейс прикладного программирования) для глубокого обучения. То есть он сам по себе не реализует функциональность глубокого обучения, но построен поверх существующих фреймворков глубокого обучения, таких как Tensorflow, и обеспечивает улучшенную функциональность, более быстрые циклы реализации и дополнительные функции. Одна из его наиболее полезных функций заключается в том, что он предоставил доступ к большому пулу существующих моделей глубокого обучения, предварительно обученных в ImageNet (довольно трудоемкий и требующий вычислительных ресурсов процесс). Следовательно, это облегчает трансферное обучение, которое представляет собой процесс переназначения существующей модели глубокого обучения для другой задачи.

Одна из проблем/ограничений существующего подхода заключается в том, что модели глубокого обучения имеют переконфигурированную архитектуру и поддерживают определенный размер входного изображения. Но что, если мы хотим использовать их для изображения меньшего или большего размера?

Что ж, к счастью, для этого есть обходной путь, который я недавно обнаружил в этой публикации stackoverflow. Я расскажу об этом процессе в этом посте, а также опубликую ссылку на код colab, чтобы каждый мог свободно поиграть с ним.

Глубокое погружение в код

Основная функция, выполняющая модификацию сети для поддержки нового размера изображения, заключается в следующем:

Функция сначала изменяет входные параметры формы сети. На данный момент внутренности модели не зарегистрированы. Чтобы зарегистрировать их, мы сначала преобразуем модель keras в спецификацию JSON, а затем считываем ее обратно, по существу преобразуя ее в модель keras. Благодаря этому преобразованию модель воссоздается, но с использованием предоставленных тензорных форм в качестве входных данных, поэтому она изменяет все внутренние параметры, чтобы соответствовать этому конкретному размеру изображения.

Далее рассмотрим реальный пример. Рассмотрим модель MobileNet V1, которая использует разделяемые свертки по глубине и считается эффективной глубокой нейронной сетью для задач понимания изображений (классификация/обнаружение/сегментация). При загрузке модели с весами ImageNet вы можете указать только несколько изображений входного размера, иначе на экране появится сообщение об ошибке. Исследуя размер ввода загруженной модели MobileNet, мы видим, что размер ввода по умолчанию составляет 224x224.

Использование функции change_model с размером входных данных 130x130 (который не указан в размерах входных данных MobileNet по умолчанию) в исходной модели MobileNet эффективно изменяет размер принимающего входного изображения.

new_model = change_model(MobileNet,new_input_shape=(None, 128, 128, 3))

Обратите внимание, что размер входных данных был уменьшен вдвое, как и последующие карты объектов, созданные внутренними слоями. Модель была адаптирована к новому размеру входного изображения.

Давайте проверим это на входном изображении. Для этого мы используем изображение из набора данных cifar10, который поставляется с keras и содержит классы, аналогичные ImageNet. Это упрощает воспроизведение результатов, поскольку все встроено в keras. Мы загружаем изображение грузовика, как показано ниже (изображение номер 1 из набора данных cifar10 по умолчанию, включенного в keras). Поскольку изображения cifar10 имеют размер 32x32, мы масштабируем их до 130x130 и приступаем к классификации с помощью модифицированной MobileNet.

Обратите внимание, что сеть выводит соответствующие метки, даже несмотря на то, что изображение размыто и почти половина размера была обучена демонстрации того, что веса были загружены правильно, и сеть сохраняет свои возможности распознавания, которые полезны для обучения переносу.

Вывод

Если вы только собираетесь начать свое машинное обучение и хотите учиться с нуля, я буду делать эту серию, которая будет длиться 5–6 минут о машинном обучении и некоторых побочных проектах в конце каждой главы, так что следите за обновлениями и будьте счастливы обучение

Это мое личное исследование, если у вас есть какие-либо комментарии, пожалуйста, свяжитесь со мной.

Добро пожаловать на мою среднюю страницу

Github, LinkedIn, Захра Эльхамрауи, Upwork