Привет, мир. Как следует из названия, этот блог является иллюстрацией для разработки сквозной модели CNN или ConvNet с использованием инфраструктуры PyTorch.

Что такое CNN?

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

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

Хм ... Давайте не будем выбирать данные о собаках и кошках, это очень распространено. Давайте найдем что-нибудь интересное ... Получил «Набор данных MNIST о раке кожи» от Kaggle.

Почему PyTorch? Почему не Tensorflow или Keras?

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

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

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

Следующим шагом будет загрузка данных в нашу среду colab. Ниже приведена реализация в colab.

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

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

Теперь это похоже на сбалансированный набор данных. Мы можем перейти к разделению данных на поезд и тестовый набор. Мы будем использовать random_split () внутри torch.utils.data, чтобы разделить наш набор данных на 80% обучающий и 20% проверочный набор.

Мы будем обучать наши данные, используя 80% набора данных, и использовать 20% набора данных для проверки и тестирования точности. Мы будем использовать предварительно обученную модель resnet18 и настроить ее с окончательными выходными слоями, соответствующими нашим требованиям.

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

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

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

Можно четко интерпретировать, что согласно нашему прогнозу модели, иногда класс «мел» (меланома) ошибочно классифицируется как «bkl» (доброкачественные кератозоподобные образования), а «nv» (меланоцитарные невусы) также является «nv» (меланоцитарные невусы). ошибочно классифицируется как «bkl» (доброкачественные образования, похожие на кератоз) и «мел» (меланома). поэтому нам нужно быть немного более осторожными в этих прогнозах. В этом преимущество матрицы-путаницы, мы получаем подробное представление о правильной и ошибочной классификации.

Теперь развертывание модели - это всего лишь несколько шагов. Создание той же сети и загрузка словаря состояний контрольной точки модели и ввод изображения в преобразованном формате (тензор).

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

Я попытался охватить непрерывную реализацию, поэтому, пожалуйста, дайте мне знать, если я пропустил что-то важное и могу сделать что-то лучше. Если вам понравился этот пост, буду очень благодарен, если вы поможете его распространению и публикации. Благодарности всегда обнадеживают :)

Спасибо за прочтение...