Создание классификатора изображений мирового уровня

Личные заметки от быстрый.ай МООК по практическому глубокому обучению для программистов.

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

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

Увеличение данных

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

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


Вариации одного и того же изображения для увеличения обучающих данных.

Скорость обучения

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

А Научно-исследовательская работа Лесли Н. Смит о циклических скоростях обучения предполагает, что увеличение нашей скорости обучения может иметь краткосрочный отрицательный эффект, но при этом достигать долгосрочного положительного эффекта на производительность нашей модели во время обучения. Одна из причин этого заключается в том, что иногда сложность уменьшения потерь и, в конечном итоге, сходимости к нашему локальному оптимуму заключается в наличии седловых точек. Седловые точки — это области с меньшими градиентами, поэтому требуется большая скорость обучения, чтобы «выпрыгнуть» из таких плато и, в конечном итоге, ускорить пересечение таких областей. Другая причина заключается в том, что оптимальная скорость обучения, скорее всего, находится между двумя границами, поэтому выбор этих границ обеспечит использование оптимальной скорости обучения во время обучения.

Теперь, когда у нас есть стратегия определения оптимальной скорости обучения, как мы можем решить, что представляет собой этот скаляр на практике? В программу встроена функция быстрый.ай библиотека под названием Learning Rate Finder .lr_find(). Эта функция работает, инициализируя скорость обучения с небольшого значения и постепенно увеличивая скорость обучения на разных итерациях. Затем мы можем взглянуть на график потерь в зависимости от скорости обучения, используя другую встроенную функцию. .sched.plot() поэтому у нас есть визуальное представление производительности каждой скорости обучения, а затем выбор оптимальной скорости обучения. Мы также можем создать массив скоростей обучения для использования во время обучения, чтобы наши модели могли выполнять стохастический градиентный спуск с теплыми перезапусками (SGDR) на случай, если наша модель застряла в локальном оптимуме, который на самом деле не обобщает наш набор данных.


График потерь и скорости обучения.


Понимание увеличения данных и выбор оптимальной скорости обучения — верный способ улучшить производительность вашей модели. Опираясь на эти практики на быстрый.ай библиотека дает нам преимущество в точности и скорости.

Библиотека fastai — это бесплатная библиотека с открытым исходным кодом, созданная поверх Pytorch v1. Вы можете ознакомиться с документацией здесь если это звучит как то, что вас заинтересует.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *