В этой статье я познакомлю вас с миром трансферного обучения; происхождение, объяснение и реальная реализация этого!

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

Вступление

Трансферное обучение - популярный подход в глубоком обучении, при котором мы используем предварительно обученные модели в качестве отправной точки для задач прогнозирования. Классические методы обычно используют огромные вычислительные и временные ресурсы для разработки моделей нейронных сетей.

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

Ладно, хватит о введении! Давайте разберемся, почему мы используем трансферное обучение!

Зачем передавать обучение?

Таким образом, в глубоком обучении люди всегда выбирают модели, которые готовятся или обучаются самостоятельно. Они всегда стремятся делать свои модели с нуля, и это хороший подход. Создавая модель с нуля, вы получаете к ней полный доступ. Вы можете диктовать пьесу. Но единственный недостаток в том, что это требует много вычислительного времени и ресурсов. Чтобы получить правильные гиперпараметры, нужно много поиграть с ним. Что ж, вот где в игру вступает трансферное обучение. Это предварительно обученные модели, которые вы можете напрямую использовать в своих наборах данных.

Соревнования по глубокому обучению, такие как DrivenData, Kaggle, ODS.ai, являются источником таких моделей глубокого обучения. Есть также различные исследовательские работы, написанные по алгоритмам, касающимся трансферного обучения. Следовательно, это развивающаяся и захватывающая область глубокого обучения!

Когда вы пытаетесь построить свою нейронную сеть с нуля, вам нужно много данных для ее обучения и проверки. В большинстве случаев это недоступно. Что ж, именно здесь на помощь приходит трансферное обучение. Мы можем построить хорошо структурированную нейронную сеть, используя трансферное обучение. Это требует более или менее данных, поскольку модели предварительно обучены.

Это так здорово! Но как это работает? Рад, что вы спросили.

Как работает трансферное обучение?

Лучший способ научиться - это делать.

Имея в виду эту цитату, я объясню вам работу трансферного обучения с помощью примера:

Постановка проблемы: мы попытаемся создать классификатор изображений, который бы предсказывал различные марки автомобилей. А именно Mercedes, Audi и Lamborghini.

Мы будем использовать алгоритм трансферного обучения ResNet50. Это один из самых популярных алгоритмов трансферного обучения.

ResNet50 - это вариант модели ResNet, которая имеет 48 слоев свертки, а также 1 слой MaxPool и 1 слой среднего пула. Он имеет 3,8 x 10⁹ операций с плавающей запятой. Что ж, об этом позже!

Звучит круто, правда? Я почти уверен, что вы обнаружите, что он работает еще круче!

Для современных алгоритмов обучения передачи, таких как ResNet50 и InceptionV3, вам необходимо иметь определенный размер набора входных изображений. В этом случае мы бы выбрали (224, 224) в качестве наших измерений. После этого мы установили пути к нашим файлам обучения и валидации.

Теперь мы инициализируем нашу модель ResNet50. Давайте посмотрим на параметры:

  1. input_shape: здесь мы объединяем image_size с [3], потому что нам нужно, чтобы наши изображения были в формате RGB. Поскольку формат RGB требует трех измерений, мы добавляем дополнительное измерение.
  2. веса: мы используем "imagenet" для наших весов. ImageNet - это визуальная база данных, которую разработчики и инженеры используют для различных приложений, таких как распознавание изображений, распознавание объектов и т. Д. ImageNet поможет повысить точность нашей модели, поскольку она будет предварительно обучена МНОГО данных!
  3. include_top: мы хотим, чтобы наш include_top был false, поскольку результат этого алгоритма приводит к более чем 100 категориям (причина в ImageNet). Поскольку нам нужно всего три выходных канала, мы устанавливаем include_top как false.

Обучение нашей модели

Что касается наших слоев, мы не собираемся их повторно обучать. Мы хотим использовать веса, используемые в ResNet50. При переносе обучения всегда используйте повторно, а не тренируйте заново.

Поскольку вывод нашего ResNet50 состоит почти из 1000 категорий, нам нужно найти способ сгладить наши выходные слои. Следовательно, мы используем функцию Flatten () в Keras. Подробнее об этом здесь.

Теперь для создания нашего слоя предсказания мы будем использовать слой Dense в Keras. Первым параметром будет общее количество папок, которое в данном случае равно 3. Поскольку это проблема классификации, мы будем использовать softmax в качестве нашей функции активации.

Для создания нашей модели мы будем использовать функцию Model из библиотеки Keras.

1. входы: для алгоритма ResNet50 мы будем использовать resnet.inputs.

2. выходы: нашим выходным слоем будет уровень предсказания, который мы создали непосредственно перед этой операцией.

Теперь нам нужно рассказать нашей модели о функциях потерь и оптимизаторах, которые она должна использовать. Поэтому мы используем функцию model.compile.

  1. Мы будем использовать Категориальную кросс-энтропию в качестве нашей функции потерь. Подробнее об этом здесь.
  2. В качестве оптимизатора мы будем использовать ADAM. Мы используем ADAM, потому что он эффективен с вычислительной точки зрения и не требует большого объема памяти.
  3. Кроме того, мы будем использовать Точность в качестве показателя для сравнения.

Теперь, чтобы дать вам краткое описание нашей модели:

Я ХОЧУ, ПОСМОТРИТЕ НА ЭТО! Всего несколько строк кода, и у вас есть модель с ТАКИМ МНОЖЕСТВОМ СЛОЕВ! В этом прелесть трансферного обучения! Теперь, наконец, приступим к нашей модели!

Увеличение изображения:

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

PS: мы не увеличиваем набор тестовых / проверочных изображений, поскольку это приводит к увеличению шума.

Подбираем нашу модель:

Здесь мы используем наш обучающий и тестовый набор, который мы создали после процесса увеличения изображения для нашей модели. Мы будем запускать модель в течение 30 эпох, чтобы она тренировалась плавно.

Полученные результаты:

Как видите, мы получили неплохие результаты по потерям и точности. Я добился точности около 89% с алгоритмом ResNet50. Inception V3 - это еще один современный алгоритм, который вы можете использовать с этим набором данных. Я настоятельно рекомендую вам попробовать это.

Последние мысли:

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

Ссылки:

Все коды, связанные с этой статьей, можно найти здесь.

Чтобы подключиться к GDSC, подпишитесь на социальные сети и никогда не пропустите обновления:
Веб-сайт: https://gdsc.community.dev/vellore-institute-of- technology-bhopal /
Instagram: https://www.instagram.com/gdscvitbhopal/
LinkedIn: https: // www.linkedin.com/company/gdscvitbhopal
Facebook: https://www.facebook.com/dscvitbhopal
YouTube: https://www.youtube.com/channel/UCVr5tPwyUH8rJd5yEhBd94w
GitHub: https://github.com/DSC-VIT-BHOPAL/
Twitter: https://twitter.com/gdscvitbhopal
Приглашение в Discord: https://discord.gg/3hJA2Vyt
Кому стать представленным на средней странице GDSC, отправьте электронное письмо по адресу: [email protected]
Группа Whatsapp: https://chat.whatsapp.com/Fr7i8d3JAy7GepHvMP1rtS

Свяжитесь со мной здесь:
Linkedin: https://www.linkedin.com/in/jackson-sondi-0100/
Github: github.com/JackJJCodes
Instagram: https://www.instagram.com/j_24_07/