Использование пакетной нормализации и увеличения данных

1200 образцов были разделены следующим образом:

  • Обучение: 864 образца
  • Валидация: 216 образцов
  • Тест: 120 образцов

Наборы для обучения и проверки используются во время настройки гиперпараметров модели, а наборы для испытаний — только для финальной проверки точности модели.

Python 3 использовался в качестве языка программирования, библиотека TensorFlow 2.0 для создания моделей и KerasTuner для настройки гиперпараметров. В качестве поддержки использовались другие библиотеки, такие как numpy, matplotlib и sklearn.

Класс ImageDataGenerator использовался для генерации дополнительных образцов для обучения, подробнее о нем можно узнать здесь.

Основная структура модели со сверткой, использующая последовательный подход, выглядит следующим образом:

  • 1ª Слой: Сверточный слой
  • 2ª Слой: Слой пакетной нормализации
  • 3ª Слой: Объединенный слой
  • 4ª Слой: Сверточный слой
  • 5ª Слой: Слой пакетной нормализации
  • 6ª Слой: Объединение слоев
  • 7ª Слой: Сгладить слой
  • 8ª Слой: Плотный слой
  • 9ª Слой: Плотный слой

Слои с 1 по 8 используют ReLu в качестве функции активации, в то время как слой 9ª использует функцию softmax, поскольку это проблема множественной классификации. Используемые метрики точности и потерь были, соответственно, CategoricalCrossentropy и CategoricalAccuracy, присутствующие в tensorflow 2.0.

Были рассмотрены следующие гиперпараметры и их возможные варианты:

  • Размер ядра, используемого в первом слое свертки: от 2 до 5
  • Количество единиц в первом слое свертки (фильтры для поиска): от 16 до 32 единиц с шагом 8 за попытку.
  • Размер пула, используемого на первом слое пула: 2 или 3
  • Размер ядра, используемого во втором слое свертки: 2 или 3
  • Количество единиц во втором слое свертки (фильтры для поиска): от 8 до 16 единиц с шагом 4 за попытку.
  • Размер пула, используемого на втором уровне пула: 2 или 3
  • Количество единиц в плотном слое: от 64 до 128 единиц с шагом 32
  • Скорость обучения: минимум 110–4, максимум 110–2, по логарифмической шкале.
  • Бета 1: от 0,90 до 0,99 с шагом 0,01
  • Бета 2: от 0,95 до 0,99 с шагом 0,01

Для выполнения настройки гиперпараметров использовалась BayesianOptimization из библиотеки KerasTuner, всего было выполнено сто испытаний, по одному выполнению на испытание, для создания байесовского оптимизатора использовались альфа 0,5 и бета 0,7.

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

После окончания выполнения лучшими найденными гиперпараметрами стали:

  • «kernel_conv_1»: 3
  • «Initial_CP_units»: 32
  • ‘size_pool_1’: 2
  • «kernel_conv_2»: 3
  • ‘2_CP_units’: 8
  • ‘size_pool_2’: 2
  • «FC_units»: 96
  • «бета1»: 0,9900000000000001
  • «бета2»: 0,98
  • «скорость»: 0,0014273888177808397

С этими параметрами резюме модели дает нам:

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

  • Потери поезда: 1,052 — акк: 0,994
  • Потери при валидации: 1,061 — в соотв.: 0,981
  • Потери при тестировании: 1,069 — по соотв.: 0,983

По крайней мере, используя отчет о классификации от sklearn, выставляются точность, отзыв и оценка f1.

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

Структура модели, используемой для сравнения, следующая:

  • 1ª Слой: Сгладить слой
  • 2ª Слой: Плотный слой (без функции активации)
  • 3ª Слой: Слой пакетной нормализации
  • 4ª Слой: Активационный слой
  • 5ª Слой: Плотный слой

Гиперпараметры, выбранные для настройки:

  • Количество единиц в Первом плотном слое: от 64 до 128 единиц с шагом 32
  • скорость обучения: минимум 110–4, максимум 110–2, по логарифмической шкале
  • бета 1: от 0,90 до 0,99 с шагом 0,01
  • бета 2: от 0,95 до 0,99 с шагом 0,01

Эта же конфигурация использовалась для создания BayesianTuning, всего на настройку этой модели было потрачено …

После окончания выполнения лучшими найденными гиперпараметрами стали:

  • «FC_units»: 64
  • «бета1»: 0,9800000000000001
  • «бета2»: 0,98
  • «скорость»: 0,00010149506885369505

Резюме этой модели возвращает:

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

  • Потери поезда: 1,244 — акк: 0,878
  • Потери при валидации: 1,272 — в соотв.: 0,852
  • Потери при тестировании: 1,232 — по соотв.: 0,883

Как и ранее, был использован отчет о классификации, результат был следующим:

Используемый код можно найти в этом блокноте colab.