Введение

Я экспериментирую с моделями глубокого обучения в PyTorch уже пару недель. PyTorch — это пакет Python с открытым исходным кодом, который обеспечивает тензорные вычисления (аналогичные numpy) с поддержкой графического процессора. Набор данных, используемый для этого конкретного сообщения в блоге, не соответствует реальному использованию PyTorch для классификации изображений. Тем не менее, это служит общей идеей того, как трансферное обучение можно использовать для более сложной классификации изображений. В двух словах, трансферное обучение — это повторное использование модели, разработанной для какой-то другой задачи классификации, для ваших целей классификации. Набор данных был создан путем извлечения изображений из поиска изображений Google.

Создание набора данных

Для нашего набора данных нам нужны изображения птиц, самолетов и Супермена. Мы будем использовать пакет icrawler для загрузки изображений из поиска изображений Google.

Повторяем то же самое для птиц и Супермена. Как только все файлы будут загружены, мы реструктурируем папки, чтобы они содержали наши образцы для обучения, тестирования и проверки. Я выделяю 70% на обучение, 20% на проверку и 10% на тестирование.

Загрузка данных

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

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

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

Загрузка предварительно обученной модели

Мы будем использовать Densenet для наших целей.

Классификатор предварительно обученной модели принимает на вход 1920 признаков. Мы должны соответствовать этому. Однако выходной признак для нашего случая равен 3 (птица, самолет и Супермен).

Теперь давайте создадим наш классификатор и заменим классификатор модели.

Мы используем функцию активации ReLU со случайными выпадениями с вероятностью 20% в скрытых слоях. Для выходного слоя мы используем LogSoftmax.

Критерий обучения, оптимизатор и затухание

Обучение и тестирование моделей

Давайте посчитаем точность модели без предварительного обучения.

В настоящее время точность довольно низкая, чего и следовало ожидать. Параметр cuda здесь — это логический объект, который передается для определения доступности аппаратного обеспечения графического процессора на компьютере.

Обучим модель.

Поскольку поддерживается GPU, обучение заняло около 10 минут. Точность проверки составляет почти 99%. Давайте снова проверим точность по обучающим данным.

Предварительная обработка изображения

Мы объявляем несколько функций для предварительной обработки изображений и передачи обученной модели.

Прогнозирование путем передачи изображения

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

Итак, это все.

Это птица… это самолет… это Супермен

Первоначально опубликовано на www.ayushsubedi.com.