[Глубокое обучение] Сверточная нейронная сеть CNN-Сверточный слой

Нейронные сети
[Глубокое обучение] Сверточная нейронная сеть CNN-Сверточный слой

Это 18-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

Сверточные нейронные сети (CNN) — это класс нейронных сетей с прямой связью с глубокой структурой, который включает сверточные вычисления и является одним из типичных алгоритмов глубокого обучения. Сверточная нейронная сеть обладает способностью обучения представлению и может выполнять инвариантную к сдвигу классификацию входной информации в соответствии с ее иерархической структурой, поэтому ее также называют «инвариантной к сдвигу искусственной нейронной сетью» (Neural Networks, SIANN)». (перенесено из энциклопедии Baidu)

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

1. Ядро свертки

Во-первых, давайте посмотрим, что такое ядро ​​свертки:

image.png

Ядро свертки представляет собой двумерную последовательность n*n (n обычно является нечетным числом, например 1*1, 3*3, 5*5 и т. д.), а приведенное выше ядро ​​свертки 3*3.

Затем введите один слой 5 * 5 «изображений»:

image.png

Так называемая «свертка» — это процесс суммирования внутреннего произведения «изображения» с ядром свертки по порядку:

image.png

Расчет вышеуказанных шагов выглядит следующим образом:

image.png

Установите размер шага s=1 (размер шага можно регулировать), следующим шагом является вычисление:

image.png

Ниже приведены полные шаги(Источник изображения):

002928_hnHI_876354.gif

2. Нейроны

Каждый нейрон состоит из n ядер свертки плюс значение смещения b, а значение n совпадает с количеством слоев входного изображения.Например, если мы хотим свернуть фотографию, состоящую из трех цветов RGB, нам нужно до 3 ядер свертки. Суммируйте сумму вышеуказанных внутренних продуктов (в человеческих терминах это ядро ​​свертки, которое сворачивает слой, за который оно отвечает, и складывает три полученных результата), и, наконец, добавляет значение транспонирования b к результату, и вы get Я получил номер (последняя классическая картинка, эту картинку я тоже читал, когда узнал):

image.png

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

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

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

Полная анимация показана ниже (вы должны увидеть картинку для входа, и она была перевернута несколько раз):1845730-5ca69abe03f57d72.webp

3. Режим свертки

Следует отметить, что существует более одного режима свертки, который делится на три категории:

  1. full
  2. same
  3. valid

full

Признаки начала и конца: ядро ​​свертки касается края изображения:

image.png

(Выбранная часть является ядром свертки)

Этот шаблон свертки кажется необычным (или, может быть, я недостаточно изучил).

same

Признаки начала и конца: центр ядра свертки совпадает с краем изображения:

image.png

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

valid

Начальный и конечный знаки: ядро ​​свертки полностью введено с изображением:

image.png

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

图像大小 -> a*a*d
卷积核尺寸 -> i*i
神经元数量 -> n
步长 -> s
神经元:d个卷积核加一个转置数b
输出层大小: [(a-i)/s + 1]*[(a-i)/s + 1]*n

(Важное сказано трижды, количество выходных слоев определяется количеством нейронов)

В-четвертых, расчет параметров

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

Существует также место, о котором легко забыть (я должен забыть ⊙﹏⊙∥), заключается в том, что значение транспонирования b также является частью параметров для общей настройки.

это всенейроныКоличество (это может быть что угодно, кроме нейронов ╮(╯-╰)╭), поэтому получается следующая формула расчета:

图像大小 -> a*a*d
卷积核尺寸 -> i*i
神经元数量 -> n
参数量:n*(i*i*d+1)

(Примечание: размер шага не влияет на количество параметров, но повлияет на количество вычислений)

Например:

Размер одного изображения: 150*150*3

Продолжаем операцию свертки на нем, чтобы на выходе получилось 146*146*32

Чтобы завершить эту операцию свертки, мы устанавливаем шаг s=1, размер ядра свертки i*i=5*5 и количество нейронов n=32 (не думаю, что мне нужно повторять описание).

Сумма параметра=32*(5*5*3+1)=2432.