Сверточные нейронные сети (CNN или ConvNets) - это класс глубокой нейронной сети, применяемый в основном к визуальным данным. CNN - это умный способ повысить точность модели, чем нейронная сеть с прямой связью.

Свертка - это довольно простая математическая операция с ядром на самом разгаре. Ядро - это просто небольшая матрица весов. Это ядро ​​«скользит» по входным 2D-данным, выполняя поэлементное умножение на ту часть входа, на которой оно находится в данный момент, а затем суммирует результаты в один выходной пиксель.

Почему ConvNets работают намного лучше, чем традиционные нейронные сети FeedForward?

Кто-то может подумать, почему бы просто не сгладить изображение и не передать его в нейронную сеть прямого распространения. В конце концов, изображение - это просто матрица значений пикселей. Но это не так….

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

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

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

CNN по классификации фруктов

Это первый в истории проект глубокого обучения, который я сделал с нуля. Он использует CNN для классификации 131 вида фруктов с точностью 85%.

Он использует набор данных Fruits 360, размещенный на Kaggle. Этот набор данных состоит из более чем 60 000 изображений различных типов фруктов для обучения модели. Каждое изображение - это RGB с размерами 100 пикселей на 100 пикселей.

Пример обучающих данных,

Хотя обучение модели - это всего лишь ожидание, это то, что меня больше всего волновало. Первоначальная потеря проверки и точность проверки моей модели составляли 4,876 и 1,01% соответственно.

Сразу после 1-й эпохи обучения потеря валидации снизилась до 1,2080, а точность валидации увеличилась до 93%. Я обучил модель еще 5 эпохам, и окончательная потеря проверки составила 0,0452, а окончательная точность проверки составила 99%.

Первоначально точность увеличивалась с большей скоростью, затем кривая выравнивается.

Характер потери также похож на точность, с той лишь разницей, что она просто вогнутая.

При тестировании модели на тестовом наборе данных окончательная потеря составила 0,7845, а точность составила 85,4%.

Аналогичная модель с использованием нейронной сети с прямой связью

Я сделал аналогичную модель классификации, используя тот же набор данных, используя нейронную сеть прямого распространения. С более чем 25 эпохами обучения лучшие потери валидации и точность валидации, которые я мог получить, составили 2,008 и 61,4% соответственно.

Это ясно показывает, насколько CNN намного превосходят нейронные сети прямого распространения.

Ссылка на записную книжку CNN: https://jovian.ml/aaryanreegmi39/course-project-fruits-3-cnn

Ссылка на записную книжку прямой нейронной сети: https://jovian.ml/aaryanreegmi39/course-project-fruits-2

Ссылка на мою страницу Github для этого проекта:

Https://github.com/Aaryan73/Fruit_Classification_using_CNN

Использованная литература:

Https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1