Сверточные нейронные сети (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://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1