Все мы ежедневно сталкиваемся с множеством цветов. Но иногда мы даже не знаем их имен. Мы все удивляемся: «Я бы хотел, чтобы мой компьютер / мобильный телефон мог это классифицировать», когда мы сталкиваемся с красивым цветком. Это мотив, стоящий за этой статьей, - классифицировать изображения цветов.
Основная цель этой статьи - использовать сверточные нейронные сети (CNN) для классификации изображений цветов по 10 категориям.
НАБОР ДАННЫХ
Набор данных Kaggle - https://www.kaggle.com/olgabelitskaya/flower-color-images
В наборе данных есть 10 классов:
- Флокс
- Роза
- Календула
- Ирис
- Левкантема максимальная (маргаритка Шаста)
- Колокольчик (колокольчик)
- Альт
- Rudbeckia laciniata (Goldquelle)
- Пион
- Аквилегия
ИМПОРТ
Я буду использовать Tensorflow для реализации CNN, Matplotlib для построения графиков и отображения изображений, Seaborn для отображения тепловой карты
МОДЕЛЬ
Модель состоит из 2 слоев Conv2D по 128 нейронов в каждом, а также слоев MaxPooling, за которыми следуют 2 слоя Dense.
Я использовал здесь LeakyReLU. ReLU также может дать здесь хорошие результаты.
Потеря - Категориальная кроссентропия , а Оптимизатор - Адам.
Модель Архитектура:
Layer (type) Output Shape Param # ================================================================= conv2d_4 (Conv2D) (None, 126, 126, 128) 3584 _________________________________________________________________ leaky_re_lu_6 (LeakyReLU) (None, 126, 126, 128) 0 _________________________________________________________________ max_pooling2d_4 (MaxPooling2 (None, 63, 63, 128) 0 _________________________________________________________________ dropout_6 (Dropout) (None, 63, 63, 128) 0 _________________________________________________________________ conv2d_5 (Conv2D) (None, 61, 61, 128) 147584 _________________________________________________________________ leaky_re_lu_7 (LeakyReLU) (None, 61, 61, 128) 0 _________________________________________________________________ max_pooling2d_5 (MaxPooling2 (None, 30, 30, 128) 0 _________________________________________________________________ dropout_7 (Dropout) (None, 30, 30, 128) 0 _________________________________________________________________ global_max_pooling2d_2 (Glob (None, 128) 0 _________________________________________________________________ dense_4 (Dense) (None, 512) 66048 _________________________________________________________________ leaky_re_lu_8 (LeakyReLU) (None, 512) 0 _________________________________________________________________ dropout_8 (Dropout) (None, 512) 0 _________________________________________________________________ dense_5 (Dense) (None, 10) 5130 _________________________________________________________________ activation_2 (Activation) (None, 10) 0 ================================================================= Total params: 222,346 Trainable params: 222,346 Non-trainable params: 0
Обратные вызовы
Я определил 2 обратных вызова
- ModelCheckpoint - для сохранения лучшей модели во время обучения
- ReduceLROnPlateau - соответственно снижает скорость обучения во время обучения
Тренироваться
Модель обучается с размером пакета = 32 и 75 эпох.
Поскольку у нас не так много данных, мы используем Image Augmentation, чтобы синтезировать больше данных и обучать нашу модель с их помощью.
РЕЗУЛЬТАТ
Модель достигла точности проверки 80,95238%, что вполне прилично. И мы видим, что модель не сильно переобучалась. Так что это неплохая модель
ПРОГНОЗЫ
Давайте посмотрим на некоторые прогнозы, сделанные нашей моделью на случайно выбранных изображениях.
Ссылка на блокнот: Здесь
Предоставлено: Рассуант Шанкар