содержание
Подробное объяснение параметров каждого слоя:
3. Слой S2 — слой пула (слой понижающей дискретизации)
5. Слой S4 — слой пула (слой понижающей дискретизации)
7. Слой F6 — полносвязный слой
8. Выходной слой — полносвязный слой
Сводка параметров каждого слоя
Резюме
LeNet-5 — это сверточная нейронная сеть (Convolutional Neural Network, CNN), предложенная LeCun в 1994 году для распознавания рукописных цифр и машинопечатных символов. Это новаторская разработка сверточных нейронных сетей. Название происходит от имени автора LeCun. , 5 — это кодовое название результатов его исследований, это пятая версия LeNet. LeNet-5 заявил, что корреляция между элементами пикселей в изображении может быть извлечена с помощью операции свертки совместного использования параметров, и в то же время используется комбинированная структура свертки, понижающей дискретизации (объединения) и нелинейного отображения. сети распознавания изображений.
1. Структура модели
Как показано на рисунке выше, LeNet-5 содержит в общей сложности 7 слоев (входной слой не используется в качестве сетевой структуры), который состоит из 2 сверточных слоев, 2 слоев понижающей дискретизации и 3 слоев соединения соответственно.
Подробное объяснение параметров каждого слоя:
1. Входной слой — INPUT
Первый — это слой ВХОДА данных, и размер входного изображения равномерно ReSize 32*32.
Примечание: Этот слой не считается сетевой структурой LeNet-5, традиционно входной слой не рассматривается как одна из сетевых иерархий.
2. Слой C1 - слой свертки
Формулу расчета сверточного слоя смотрите в этой статье:Фонд CNN - состав сверточной нейронной сети - AI Hao - Блог CSDN
Входное изображение: 32×32
Размер ядра свертки: 5×5
Типы ядер свертки: 6
Выходной размер карты характеристик: 28×28 (32-5+1)=28
Количество нейронов: 28×28×6
Обучаемые параметры: (5×5+1) × 6 (5×5=25 единичных параметров и один параметр смещения для каждого фильтра, всего 6 фильтров)
Количество соединений: (5×5+1)×6×28×28=122304
Подробное описание:Выполните первую операцию свертки над входным изображением (используя 6 ядер свертки размером 5×5), чтобы получить 6 карт признаков C1 (6 карт признаков размером 28×28, 32-5+1=28). Посмотрим, сколько нужно параметров.Размер ядра свертки 5×5, всего 6×(5×5+1) = 156 параметров, где +1 означает, что ядро имеет смещение. Для сверточного слоя C1 каждый пиксель в C1 соединен с 5×5 пикселями и 1 смещением во входном изображении, поэтому всего имеется 156×28×28=122304 соединения. Есть 122304 связи, но нам нужно выучить только 156 параметров, в основном за счет распределения веса.
3. Слой S2 — слой пула (слой понижающей дискретизации)
Вход: 28×28
Площадь выборки: 2×2
Метод выборки: добавляются 4 входа, умножаются на обучаемый параметр, плюс обучаемое смещение. Результаты через сигмовидную
Типы выборки: 6
Выходная функцияРазмер карты: 14×14 (28/2)
Количество нейронов: 14×14×6
Количество соединений: (2×2+1)×6×14×14
Размер каждой карты объектов в S2 составляет 1/4 размера карты объектов в C1.
Подробное описание:За первой сверткой следует операция объединения, в которой для объединения используется ядро 2×2, поэтому получаются S2, 6 карт признаков 14×14 (28/2=14). Слой объединения S2 должен суммировать пиксели в области 2×2 в C1, умножать весовой коэффициент и добавлять смещение, а затем снова отображать результат. Одновременно имеется 5x14x14x6=5880 соединений.
4. Слой C3 - слой свертки
Вход: все 6 или несколько комбинаций карт объектов в S2.
Размер ядра свертки: 5×5
Типы ядер свертки: 16
Выходная функцияРазмер карты: 10×10 (14-5+1)=10
Каждая карта объектов в C3 связана со всеми 6 или несколькими картами объектов в S2, что указывает на то, что карта объектов этого слоя представляет собой другую комбинацию карт объектов, извлеченных предыдущим слоем.
Один из существующих способов заключается в том, что первые 6 карт объектов C3 принимают в качестве входных данных 3 соседних подмножества карт объектов в S2. Следующие 6 карт объектов принимают в качестве входных данных 4 смежных подмножества карт объектов в S2. Следующие 3 берут в качестве входных данных подмножество из 4 карт объектов, которые не являются смежными. Последний принимает все карты функций в S2 в качестве входных данных.
Затем: Обучаемые параметры: 6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5 + 1)=1516
Количество соединений: 10×10×1516=151600
Подробное описание:После первого объединения происходит вторая свертка, выход второй свертки — C3, 16 карт признаков 10x10, а размер ядра свертки — 5 × 5. Мы знаем, что S2 имеет 6 признаков 14 × 14. Рисунок, как получить 16 признаков карты из 6 карт функций? Вот 16 карт характеристик, рассчитанных с помощью специальной комбинации карт характеристик S2. детали следующим образом:
Первые 6 карт объектов C3 (соответствующие 6 столбцам первого красного прямоугольника на рисунке выше) связаны с 3 картами объектов, подключенными к слою S2 (первый красный прямоугольник на рисунке выше), а следующие 6 карты объектов подключены к слою S2.4 карты объектов подключены (вторая красная рамка на рисунке выше), следующие 3 карты объектов подключены к 4 картам объектов, которые не подключены к слою S2, а последний один подключен ко всем картам объектов слоя S2. Размер ядра свертки по-прежнему 5×5, поэтому всего имеется 6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5). +1)+1×(6×5×5+1)=1516 параметров. А размер изображения 10×10, то есть всего 151600 подключений.
Структура свертки, соединяющая C3 и первые 3 графа в S2, показана на следующем рисунке:
Параметры, соответствующие приведенному выше рисунку, равны 3 × 5 × 5 + 1. Всего выполняется 6 сверток для получения 6 карт признаков, поэтому имеется 6 × (3 × 5 × 5 + 1) параметров. Зачем использовать вышеуказанную комбинацию? В документе говорится, что есть две причины: 1) уменьшить параметры, 2) эта асимметричная комбинация соединений выгодна для извлечения нескольких функций комбинации.
5. Слой S4 — слой пула (слой понижающей дискретизации)
Ввод: 10×10
Площадь выборки: 2×2
Метод выборки: добавляются 4 входа, умножаются на обучаемый параметр, плюс обучаемое смещение. Результаты через сигмовидную
Типы выборки: 16
Выходная функцияРазмер карты: 5×5 (10/2)
Количество нейронов: 5×5×16=400
Количество соединений: 16×(2×2+1)×5×5=2000
Размер каждой карты объектов в S4 составляет 1/4 размера карты объектов в C3.
Подробное описание:S4 — это слой объединения, размер окна по-прежнему 2×2, всего 16 карт объектов, а 16 карт 10x10 слоя C3 объединяются в блоки 2x2 для получения 16 карт объектов 5x5. Имеется 5x5x5x16=2000 соединений. Способ подключения аналогичен слою S2.
6. Слой C5 - слой свертки
Входные данные: все 16 карт характеристик ячеек слоя S4 (полностью связанные с s4).
Размер ядра свертки: 5×5
Типы ядер свертки: 120
Выходная функцияРазмер карты: 1×1 (5-5+1)
Обучаемые параметры/соединения: 120×(16×5×5+1)=48120
Подробное описание:Слой C5 представляет собой сверточный слой. Поскольку размер 16 графов в слое S4 равен 5x5, что совпадает с размером ядра свертки, размер графа, сформированного после свертки, равен 1x1. Здесь формируется 120 результатов свертки. Каждый связан с 16 графами из предыдущего слоя. Итак, имеется (5x5x16+1)x120 = 48120 параметров, а также 48120 соединений. Сетевая структура уровня C5 выглядит следующим образом:
7. Слой F6 — полносвязный слой
Вход: c5 120-мерный вектор
Метод расчета: вычислить скалярное произведение между входным вектором и вектором весов, добавить смещение и вывести результат с помощью сигмовидной функции.
Обучаемые параметры: 84×(120+1)=10164
Подробное описание:Уровень 6 является полносвязным уровнем. Слой F6 имеет 84 узла, соответствующих растровому изображению 7x12, где -1 означает белый, а 1 означает черный, так что черный и белый цвета растрового изображения каждого символа соответствуют коду. Параметры обучения и количество соединений для этого слоя составляют (120 + 1)x84=10164. Способ подключения слоя F6 следующий:
8. Выходной слой — полносвязный слой
Выходной слой также является полносвязным слоем с 10 узлами, представляющими числа от 0 до 9, и если значение узла i равно 0, результатом сетевой идентификации является число i. Используется метод подключения к сети радиальной базисной функции (RBF). Предполагая, что x является входом предыдущего уровня, а y является выходом RBF, метод расчета выхода RBF:
Значение приведенной выше формулы w_ij определяется битовым кодированием i, где i находится в диапазоне от 0 до 9, а j находится в диапазоне от 0 до 7*12-1. Чем ближе значение выхода RBF к 0, тем ближе оно к i, то есть ближе к кодовому ASCII-изображению i, указывающему, что результатом распознавания текущего сетевого ввода является символ i. Этот слой имеет 84x10=840 параметров и соединений.
На картинке выше показан процесс, в котором LeNet-5 распознает цифру 3.
Сводка параметров каждого слоя
Сетевой уровень | размер ввода | ядерный размер | выходной размер | Количество обучаемых параметров |
---|---|---|---|---|
Сверточный слой C_1 | 32×32×1 | 5×5×1/1,6 | 28×28×6 | (5×5×1+1)×6 |
Слой понижения дискретизации S_2 | 28×28×6 | 2×2/2 | 14×14×6 | (1+1)×6 |
Сверточный слой C_3 | 14×14×6 | 5×5×6/1,16 | 10×10×16 | 1516 |
Слой понижения дискретизации S_4 | 10×10×16 | 2×2/2 | 5×5×16 | (1+1)×16 |
Сверточный слой C_5 | 5×5×16 | 5×5×16/1,120 | 1×1×120 | (5×5×16+1)×120 |
Полностью связанный слой F6 | 1×1×120 | 120×84 | 1×1×84 | (120+1)×84 |
выходной слой | 1×1×84 | 84×10 | 1×1×10 | (84+1)×10 |
2. Особенности модели
- В сверточной сети используется 3-х слойная комбинация последовательностей: свертка, субдискретизация (объединение), нелинейное отображение (наиболее важная особенность LeNet-5, закладывающая основу текущей глубокой сверточной сети)
- Извлечение пространственных объектов с помощью свертки
- Понижение дискретизации с использованием среднего пространственного значения карты
- Окончательный классификатор с использованием тангенса или сигмоида
- Разреженная матрица соединений между слоями, чтобы избежать огромных вычислительных затрат
Код для воспроизведения:
import torch
from torch import nn
from torch.nn import functional as F
from torchsummary import summary
# 输入大小为32x32
class LeNet(nn.Module):
def __init__(self):
super(LeNet, self).__init__()
self.conv1 = nn.Conv2d(1, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
self.pool = nn.MaxPool2d(2, 2)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(x.size()[0], -1)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
if __name__ == '__main__':
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = LeNet()
model.to(device)
summary(model, (1, 32, 32))
Справочная статья:Сетевой анализ (1): подробный LeNet-5 (cuijiahua.com)