Трансферное обучение - блестящая функция, предоставляемая TensorFlow. Это помогает обучать новые модели, получая помощь от уже обученных моделей. Учтите, что вы хотите обучить модель прогнозированию количества определенных объектов в изображении, но у вас недостаточно изображений для обучения, затем мы можем использовать уже обученные модели в наших интересах и настроить их, чтобы получить наш результат, не обучая модель для огромный набор данных и потратить много времени и вычислений на обучение.

В этой статье я объясню, как использовать трансферное обучение для набора данных Face Counting Challenge из Analytics Vidhya.

Ссылка на набор данных: https://datahack.analyticsvidhya.com/contest/vista-codefest-computer-vision-1/

Сначала нам нужно будет прочитать изображения и целевые значения в массиве numpy. Я поделился ссылкой на блокнот, где присутствует весь код.

Теперь мы загружаем нашу базовую модель в переменную. Здесь используется модель MobileNetV2, которая присутствует в TensorFlow. Мы предоставляем входную форму изображения и загружаем веса с помощью «imagenet». Это означает, что базовая модель была обучена на наборе данных в сети. Мы устанавливаем для обучения базовой модели значение False, чтобы не повторять весь процесс обучения этих слоев снова.

Теперь мы можем увидеть слой базовой модели, распечатав сводку модели, чтобы проверить, правильно ли загружена модель.

Из сводки видно, что базовая модель загружена успешно. Базовая модель принимает входные данные формы (224,224,3), а последний слой модели - (7,7,1280). Теперь мы строим нашу модель поверх этой модели.

Сначала мы получаем последний уровень вывода, а также создаем уровень ввода, который предоставляет данные в соответствии с требованиями базовой модели, например: для модели могут потребоваться данные, нормализованные между [-1,1] или [0,1], в зависимости от того, как это был обучен.

Теперь мы можем свести последний слой и добавить несколько плотных слоев в соответствии с нашими потребностями или добавить еще несколько сверток и создать модель в соответствии с нашими требованиями.

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

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

Когда мы отправляем прогноз тестовых данных, мы получаем RMSE 1,86, что входит в сотню лучших прогнозируемых результатов.

Полный код для этого представлен здесь: https://colab.research.google.com/drive/1wWRScvK2B6ACi6eusuvEiBtBGwJyOAve?usp=sharing

Пожалуйста, ознакомьтесь с кодом, который использует несколько моделей обучения передачи, чтобы предсказать результат для этого набора данных, который дал RMSE 1,68 и рейтинг 82 на момент написания этой истории: https://github.com/LosingCoder/MachineLearning/ tree / master / Face% 20Counting% 20Challenge