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

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

Я следую за Саймоном Синеком, он говорит всегда начинать с Почему, как и, наконец, Что

Почему CNN ??? По обычным нейронным сетям ??

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

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

Мы скармливаем его модели и обучаем (обратное распространение) для множества изображений для многих итераций.

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

хорошо, работает, но погоди ..

что, если бы я дал такие тестовые картинки для предсказания.

Обычная сеть может плохо предсказывать (или не набирать много очков для кошки), и что, если я предоставлю ч / б изображения в качестве тестовых изображений (предположим, что в наборе поезда нет ч / б изображений)

Сеть может не дать наивысшей оценки вероятности, поскольку этот тип функций (ч / б) мы не обучаем.

Так что здесь происходит ??

То, что мы кормим, мы получаем.

Сеть распознает соответствие между X и y, но не шаблоны в X.

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

ConvNets используются в основном для поиска закономерностей в изображении, нам не нужно указывать функции, CNN сама понимает правильные функции, когда углубляется. Это одна из причин, по которой нам нужны CNN. . Период.

И еще одна причина в том, что обычные нейронные сети плохо масштабируются для полноразмерных изображений, скажем, размер входных изображений = 100 (ширина) * 100 (высота) * 3 (rgb).

тогда нам нужно иметь 30 000 нейронов, что очень дорого в сети.

Следовательно, нам нужно изучить CNN.

Итак, как это работает ???

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

Эти фильтры мы можем назвать весами, ядрами или функциями.

сначала они инициализируются случайным образом, затем во время обучения эти веса будут обновляться (сеть изучает эти веса)

Давайте возьмем пример. Предположим, у нас есть изображение размером 5X5, подобное этому, и такие фильтры,

Примечание. Для понимания я предполагаю, что массив 5 X 5 представляет собой полное изображение, а значения являются значениями в пикселях, в противном случае это была бы большая таблица матрицы, и значения могут быть любыми 0 и 1 или непрерывным значением (от - до +).

У нас есть 3 фильтра, которые мы инициализируем случайным образом (определяем размер фильтра).

Примечание: здесь я взял 0 или 1, чтобы упростить вычисления, обычно это непрерывные значения.

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

Как мы получили такой результат ???

Вот как

Это только для одного фильтра, мы берем локальное воспринимающее поле в изображении и применяем скалярное произведение к скалярному значению, затем перемещаем окно на Stride и повторяем тот же процесс для всего изображения.

Этот процесс называется Свертка.

Итак, Шаг 1. Примените свертку ко всем фильтрам входного изображения.

Шаг 2. Примените концепцию объединения для создания выходных изображений

например, для первого изображения,

Основная цель объединения - уменьшить размер изображения, взяв максимальные значения в окне, и заполнение здесь не требуется, но я добавил сюда только для объяснения заполнения.

Шаг 3: Нормализация, это шаг, когда вы применяете функцию активации, наиболее часто используемой функцией здесь является ReLu (выпрямленная линейная единица).

Выпрямленный линейный блок имеет выход 0, если вход меньше 0, и исходный выход в противном случае. То есть, если вход больше 0, выход равен входу.

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

Шаг 4. Загрузите эти значения в полностью подключенную нейронную сеть (мы говорили в предыдущей истории)

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

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

так вот как это работает.

Итак, что же такое сверточная нейронная сеть ????

Сверточная нейронная сеть - это сеть, состоящая из слоев разных типов, последовательно соединенных между собой.

Типы слоев

  1. Слой свертки, на котором происходит процесс свертки.
  2. Уровень объединения, на котором происходит процесс объединения.
  3. Уровень нормализации, на котором происходит процесс активации (ReLu).
  4. Полностью связанный слой (плотный)

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

Вот примеры

Хорошо, а теперь давайте заставим этого кота выполнить все шаги, посмотрим, как он будет выглядеть.

после одного слоя свертки и объединения это будет выглядеть так

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

Здесь я определил размер фильтра 3 X 3 с 3 фильтрами и размером пула = 2 X 2.

В любом случае кодирование в этой истории не рассматривается.

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

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

Прохладный! Правильно?

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

До тех пор

Увидимся!