Все мы ежедневно сталкиваемся с множеством цветов. Но иногда мы даже не знаем их имен. Мы все удивляемся: «Я бы хотел, чтобы мой компьютер / мобильный телефон мог это классифицировать», когда мы сталкиваемся с красивым цветком. Это мотив, стоящий за этой статьей, - классифицировать изображения цветов.

Основная цель этой статьи - использовать сверточные нейронные сети (CNN) для классификации изображений цветов по 10 категориям.

НАБОР ДАННЫХ

Набор данных Kaggle - https://www.kaggle.com/olgabelitskaya/flower-color-images

В наборе данных есть 10 классов:

  1. Флокс
  2. Роза
  3. Календула
  4. Ирис
  5. Левкантема максимальная (маргаритка Шаста)
  6. Колокольчик (колокольчик)
  7. Альт
  8. Rudbeckia laciniata (Goldquelle)
  9. Пион
  10. Аквилегия

ИМПОРТ

Я буду использовать 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%, что вполне прилично. И мы видим, что модель не сильно переобучалась. Так что это неплохая модель

ПРОГНОЗЫ

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

Ссылка на блокнот: Здесь

Предоставлено: Рассуант Шанкар