2-D сгруппированный сверточный слой
Сгруппированный 2-D сверточный слой разделяет входные каналы на группы и применяет скользящие сверточные фильтры. Используйте сгруппированные сверточные слои для разделяемой по каналу (также известной как разделяемая по глубине) свертки.
Для каждой группы слой свертывает вход, перемещая фильтры вдоль входных параметров вертикально и горизонтально и вычисляя точечный продукт весов и входных параметров, а затем добавляя термин смещения. Слой объединяет свертки для каждой группы независимо. Если количество групп равно количеству каналов, то этот слой выполняет канальную свертку.
создает 2-D сгруппированный сверточный слой и устанавливает layer
= groupedConvolution2dLayer(filterSize
,numFiltersPerGroup
,numGroups
)FilterSize
, NumFiltersPerGroup
, и NumGroups
свойства.
создает слой для свертки по каналу (также известной как свертка по глубине). В этом случае программное обеспечение определяет layer
= groupedConvolution2dLayer(filterSize
,numFiltersPerGroup
,'channel-wise')NumGroups
свойство во время обучения. Этот синтаксис эквивалентен установке NumGroups
количеству входа каналов.
устанавливает дополнительный layer
= groupedConvolution2dLayer(___,Name,Value
)Stride
, DilationFactor
, Параметры и инициализация, Темп обучения и регуляризация, и Name
свойства с использованием пар "имя-значение". Чтобы задать вход сигнала, используйте 'Padding'
аргумент пары "имя-значение". Для примера, groupedConvolution2dLayer(5,128,2,'Padding','same')
создает 2-D сгруппированный сверточный слой с 2 группами по 128 фильтров размера [5 5]
и заполняет вход так, чтобы выход имел тот же размер. Можно задать несколько пары "имя-значение". Заключайте каждое имя свойства в одинарные кавычки.
Используйте аргументы пары "имя-значение", разделенные запятыми, чтобы задать размер заполнения для добавления вдоль ребер входа слоя или задать Stride
, DilationFactor
, Параметры и инициализация, Темп обучения и регуляризация, и Name
свойства. Имена заключаются в одинарные кавычки.
groupedConvolution2dLayer(5,128,2,'Padding','same')
создает 2-D сгруппированный сверточный слой с 2 группами по 128 фильтров размера [5 5]
и заполняет вход так, чтобы выход имел тот же размер.'Padding'
- Вход ребра[0 0 0 0]
(по умолчанию) | вектор неотрицательных целых чисел | 'same'
Вход ребра, заданное как разделенная разделенными запятой парами, состоящая из 'Padding'
и одно из следующих значений:
'same'
- Добавить заполнение размера, вычисленного программным обеспечением во время обучения или предсказания, так что выход имеет тот же размер, что и вход, когда шаг равен 1. Если шаг больше 1, то выходной размер ceil(inputSize/stride)
, где inputSize
- высота или ширина входных и stride
входов - шаг в соответствующей размерности. Программное обеспечение добавляет одинаковое количество заполнения к верхней части и дну, и, по возможности, к левому и правому. Если заполнение, которое должно быть добавлено вертикально, имеет нечетное значение, то программное обеспечение добавляет дополнительное заполнение к нижней части. Если заполнение, которое должно быть добавлено горизонтально, имеет нечетное значение, то программное обеспечение добавляет дополнительное заполнение вправо.
Неотрицательное целое число p
- Добавить заполнение размера p
ко всем ребрам входа.
Векторные [a b]
из неотрицательных целых чисел - Добавить заполнение размера a
в верхней и нижней частях входных параметров и заполнения размерных b
налево и вправо.
Векторные [t b l r]
из неотрицательных целых чисел - Добавить заполнение размера t
на верхнюю часть, b
на дно, l
налево, и r
справа от входа.
Пример:
'Padding',1 добавляет одну строку заполнения в верхнюю часть и снизу и один столбец заполнения слева и справа от входа.
Пример:
'Padding','same'
добавляет заполнение так, чтобы выход имел тот же размер что и вход (если шаг равен 1).
FilterSize
- Высота и ширина фильтровВысота и ширина фильтров в виде вектора [h w]
двух положительных целых чисел, где h
- высота и w
- ширина. FilterSize
определяет размер локальных областей, с которыми нейроны соединяются во входе.
При создании слоя можно задать FilterSize
в качестве скаляра для использования того же значения высоты и ширины.
Пример: [5 5]
задает фильтры высотой 5 и шириной 5.
NumFiltersPerGroup
- Количество фильтров в группеКоличество фильтров в группе, заданное как положительное целое число. Это свойство определяет количество каналов в выходе слоя. Количество выхода каналов FiltersPerGroup * NumGroups
.
Пример:
10
NumGroups
- Количество групп'channel-wise'
Количество групп, заданное в виде положительного целого или 'channel-wise'
.
Если NumGroups
является 'channel-wise'
затем программное обеспечение создает слой для канальной свертки (также известной как глубинная свертка). В этом случае слой определяет NumGroups
свойство во время обучения. Это значение эквивалентно установке NumGroups
количеству входа каналов.
Количество групп должно равномерно разделять количество каналов входного сигнала слоя.
Пример: 2
Stride
- Размер шага для обхода входа[1 1]
(по умолчанию) | вектор из двух положительных целых чиселРазмер шага для прохождения входа вертикально и горизонтально, заданный как вектор [a b]
двух положительных целых чисел, где a
- размер и b
вертикального шага - горизонтальный размер шага. При создании слоя можно задать
Stride
в качестве скаляра для использования одинакового значения для обоих размеров шага.
Пример:
[2 3] задает размер шага по вертикали 2 и размер шага по горизонтали 3.
DilationFactor
- Коэффициент расширения свертки[1 1]
(по умолчанию) | вектор из двух положительных целых чиселФактор для расширенной свертки (также известный как атронная свертка), заданный как вектор [h w]
двух положительных целых чисел, где h
является вертикальным расширением и w
- горизонтальное расширение. При создании слоя можно задать DilationFactor
в качестве скаляра для использования одинакового значения как для горизонтальных, так и для вертикальных расширений.
Используйте расширенные свертки, чтобы увеличить восприимчивое поле (площадь входа, который может видеть слой) слоя, не увеличивая количество параметров или расчетов.
Слой расширяет фильтры путем вставки нулей между каждым фильтрующим элементом. Коэффициент расширения определяет размер шага для дискретизации входа или эквивалентно коэффициента повышающей дискретизации фильтра. Он соответствует эффективному размеру фильтра (Filter Size - 1). * Dilation Factor + 1. Для примера - фильтр 3 на 3 с коэффициентом расширения [2 2]
эквивалентен фильтру 5 на 5 с нулями между элементами.
Пример: [2 3]
PaddingSize
- Размер заполнения[0 0 0 0]
(по умолчанию) | вектор четырех неотрицательных целых чиселРазмер заполнения для применения к входу границам, заданный как вектор [t b l r]
из четырех неотрицательных целых чисел, где t
- заполнение применяется к верхней части, b
- заполнение, нанесенное на дно, l
- заполнение, примененное влево, и r
- заполнение, примененное справа.
Когда вы создаете слой, используйте 'Padding'
аргумент пары "имя-значение" для определения размера заполнения.
Пример:
[1 1 2 2] добавляет одну строку заполнения в верхнюю часть и снизу и два столбца заполнения слева и справа от входа.
PaddingMode
- Метод определения размера заполнения'manual'
(по умолчанию) | 'same'
Метод определения размера заполнения, заданный как 'manual'
или 'same'
.
Программа автоматически устанавливает значение PaddingMode
на основе 'Padding'
значение, заданное при создании слоя.
Если вы задаете 'Padding'
опция скаляру или вектору неотрицательных целых чисел, затем программа автоматически устанавливает PaddingMode
на 'manual'
.
Если вы задаете 'Padding'
опция для 'same'
, затем программное обеспечение автоматически устанавливает PaddingMode
на 'same'
и вычисляет размер заполнения во время обучения так, чтобы выход имел тот же размер, что и вход, когда шаг равен 1. Если шаг больше 1, то выходной размер ceil(inputSize/stride)
, где inputSize
- высота или ширина входных и stride
входов - шаг в соответствующей размерности. Программное обеспечение добавляет одинаковое количество заполнения к верхней части и дну, и, по возможности, к левому и правому. Если заполнение, которое должно быть добавлено вертикально, имеет нечетное значение, то программное обеспечение добавляет дополнительное заполнение к нижней части. Если заполнение, которое должно быть добавлено горизонтально, имеет нечетное значение, то программное обеспечение добавляет дополнительное заполнение вправо.
PaddingValue
- Значение для заполнения данных'symmetric-include-edge'
| 'symmetric-exclude-edge'
| 'replicate'
Значение для данных заполнения, заданное как одно из следующего:
PaddingValue | Описание | Пример |
---|---|---|
Скаляр | Дополните с заданным скалярным значением. |
|
'symmetric-include-edge' | Заполните используя зеркальные значения входов, включая значения ребер. |
|
'symmetric-exclude-edge' | Заполните используя зеркальные значения входов, исключая значения ребер. |
|
'replicate' | Заполните с использованием повторяющихся элементов границы входов |
|
NumChannelsPerGroup
- Количество каналов в группе'auto'
(по умолчанию) | положительное целое числоКоличество каналов в группе, заданное как 'auto'
или положительное целое число. Количество каналов в группе равно количеству входа каналов, разделенных на количество групп.
Программа автоматически устанавливает это свойство во время обучения.
Пример:
256
WeightsInitializer
- Функция для инициализации весов'glorot'
(по умолчанию) | 'he'
| 'narrow-normal'
| 'zeros'
| 'ones'
| указатель на функциюФункция для инициализации весов, заданная как одно из следующего:
'glorot'
- Инициализируйте веса с помощью инициализатора Glorot [1] (также известного как инициализатор Xavier). Инициализатор Glorot независимо выбирает из равномерного распределения с нулем среднего и отклонением 2/(numIn + numOut)
, где numIn = FilterSize(1)*FilterSize(2)*NumChannelsPerGroup
и numOut = FilterSize(1)*FilterSize(2)*NumFiltersPerGroup
.
'he'
- Инициализируйте веса с помощью инициализатора He [2]. Инициализатор He производит выборки из нормального распределения с нулем среднего и отклонением 2/numIn
, где numIn = FilterSize(1)*FilterSize(2)*NumChannelsPerGroup
.
'narrow-normal'
- Инициализируйте веса путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.
'zeros'
- Инициализируйте веса с нулями.
'ones'
- Инициализируйте веса с таковыми.
Указатель на функцию - Инициализируйте веса с помощью пользовательской функции. Если вы задаете указатель на функцию, то функция должна иметь вид weights = func(sz)
, где sz
- размер весов. Для получения примера смотрите Задать Пользовательскую Функцию Инициализации Веса.
Слой инициализирует веса только тогда, когда Weights
свойство пустое.
Типы данных: char
| string
| function_handle
BiasInitializer
- Функция для инициализации смещения'zeros'
(по умолчанию) | 'narrow-normal'
| 'ones'
| указатель на функциюФункция для инициализации смещения, заданная как одно из следующего:
'zeros'
- Инициализируйте смещение с нулями.
'ones'
- Инициализируйте смещение с таковые.
'narrow-normal'
- Инициализируйте смещение путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.
Указатель на функцию - Инициализируйте смещение с помощью пользовательской функции. Если вы задаете указатель на функцию, то функция должна иметь вид bias = func(sz)
, где sz
- размер смещения.
Слой инициализирует смещение только тогда, когда Bias
свойство пустое.
Типы данных: char
| string
| function_handle
Weights
- Веса слоев[]
(по умолчанию) | числовой массивВеса слоев для слоя, заданные как числовой массив.
Веса слоев являются настраиваемыми параметрами. Можно задать начальное значение для весов непосредственно с помощью Weights
свойство слоя. При обучении сети, если Weights
свойство слоя непусто, тогда trainNetwork
использует Weights
свойство как начальное значение. Если на Weights
свойство пустое, тогда trainNetwork
использует инициализатор, заданный как WeightsInitializer
свойство слоя.
Во время обучения Weights
является FilterSize(1)
-by- FilterSize(2)
-by- NumChannelsPerGroup
-by- NumFiltersPerGroup
-by- NumGroups
массив, где NumInputChannels
- количество каналов входного входа слоя.
Типы данных: single
| double
Bias
- Смещения слоев[]
(по умолчанию) | числовой массивСмещения слоев для слоя, заданные как числовой массив.
Смещения слоя являются настраиваемыми параметрами. При обучении сети, если Bias
непусто, тогда trainNetwork
использует Bias
свойство как начальное значение. Если Bias
пуст, тогда trainNetwork
использует инициализатор, заданный как BiasInitializer
.
Во время обучения Bias
является 1 на 1-бай- NumFiltersPerGroup
-by- NumGroups
массив.
Типы данных: single
| double
WeightLearnRateFactor
- Коэффициент скорости обучения для весовКоэффициент скорости обучения для весов, заданный как неотрицательный скаляр.
Программа умножает этот коэффициент на глобальный темп обучения, чтобы определить скорость обучения для весов на этом слое. Для примера, если WeightLearnRateFactor
равен 2, тогда скорость обучения для весов на этом слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, заданных в trainingOptions
функция.
Пример: 2
BiasLearnRateFactor
- Коэффициент скорости обучения для смещенийКоэффициент скорости обучения для смещений, заданный как неотрицательный скаляр.
Программа умножает этот коэффициент на глобальную скорость обучения, чтобы определить скорость обучения для смещений на этом слое. Для примера, если BiasLearnRateFactor
равен 2, тогда скорость обучения для смещений в слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, заданных в trainingOptions
функция.
Пример: 2
WeightL2Factor
- L2 коэффициент регуляризации для весовL2 регуляризации для весов, заданный как неотрицательный скаляр.
Программа умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для весов на этом слое. Для примера, если WeightL2Factor
равен 2, тогда L2 регуляризация для весов в этом слое в два раза превышает глобальный коэффициент регуляризации L2. Можно задать глобальный коэффициент регуляризации L2 с помощью trainingOptions
функция.
Пример: 2
BiasL2Factor
- L2 коэффициент регуляризации для смещенийL2 регуляризации для смещений, заданный как неотрицательный скаляр.
Программа умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для смещений на этом слое. Для примера, если BiasL2Factor
равен 2, тогда L2 регуляризация для смещений в этом слое в два раза превышает глобальный коэффициент регуляризации L2. Можно задать глобальный коэффициент регуляризации L2 с помощью trainingOptions
функция.
Пример: 2
Name
- Имя слоя''
(по умолчанию) | символьный вектор | строковый скаляр
Имя слоя, заданное как вектор символов или строковый скаляр. Чтобы включить слой в график слоев, необходимо задать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с слоем и Name
установлено в ''
затем программа автоматически присваивает слою имя во время обучения.
Типы данных: char
| string
NumInputs
- Количество входовКоличество входов слоя. Этот слой принимает только один вход.
Типы данных: double
InputNames
- Входные имена{'in'}
(по умолчанию)Входные имена слоя. Этот слой принимает только один вход.
Типы данных: cell
NumOutputs
- Количество выходовКоличество выходов слоя. Этот слой имеет только один выход.
Типы данных: double
OutputNames
- Выходные имена{'out'}
(по умолчанию)Выходные имена слоя. Этот слой имеет только один выход.
Типы данных: cell
Создайте сгруппированный сверточный слой с 3 группами по 10 фильтров, каждая с высотой и шириной 11 и именем 'gconv1'
.
layer = groupedConvolution2dLayer(11,10,3,'Name','gconv1')
layer = GroupedConvolution2DLayer with properties: Name: 'gconv1' Hyperparameters FilterSize: [11 11] NumGroups: 3 NumChannelsPerGroup: 'auto' NumFiltersPerGroup: 10 Stride: [1 1] DilationFactor: [1 1] PaddingMode: 'manual' PaddingSize: [0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias: [] Show all properties
Создайте сверточный слой по каналу (также известный как сверточный по глубине) с группами из 10 фильтров, каждый с высотой и шириной 11 и именем 'cwconv1'
.
layer = groupedConvolution2dLayer(11,10,'channel-wise','Name','cwconv1')
layer = GroupedConvolution2DLayer with properties: Name: 'cwconv1' Hyperparameters FilterSize: [11 11] NumGroups: 'channel-wise' NumChannelsPerGroup: 'auto' NumFiltersPerGroup: 10 Stride: [1 1] DilationFactor: [1 1] PaddingMode: 'manual' PaddingSize: [0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias: [] Show all properties
Типичная сверточная нейронная сеть содержит блоки свертки, нормализации партии . и слои ReLU. Для примера,
filterSize = 3; numFilters = 16; convLayers = [ convolution2dLayer(filterSize,numFilters,'Stride',2,'Padding','same') batchNormalizationLayer reluLayer];
Для разделяемой свертки по каналу (также известной как разделяемая по глубине свертка) замените блок свертки на свертки по каналу и блоки свертки по точке.
Задайте размер фильтра и шаг в канальной свертке и количество фильтров в точечной свертке. Для свертки по каналу задайте один фильтр на группу. Для точечной свертки задайте фильтры размера 1 в convolution2dLayer
.
cwsConvLayers = [ groupedConvolution2dLayer(filterSize,1,'channel-wise','Stride',2,'Padding','same') batchNormalizationLayer reluLayer convolution2dLayer(1,numFilters,'Padding','same') batchNormalizationLayer reluLayer];
Создайте сеть, содержащую слои для разделяемой по каналам свертки.
layers = [ imageInputLayer([227 227 3]) convolution2dLayer(3,32,'Padding','same') batchNormalizationLayer reluLayer groupedConvolution2dLayer(3,1,'channel-wise','Stride',2,'Padding','same') batchNormalizationLayer reluLayer convolution2dLayer(1,16,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(5) softmaxLayer classificationLayer];
[1] Глорот, Ксавьер и Йошуа Бенгио. «Понимание сложности обучения нейронных сетей с глубоким Feedforward». В работе тринадцатой Международной конференции по искусственному интеллекту и статистике, 249-356. Сардиния, Италия: AISTATS, 2010.
[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. «Delving Deep Into Rectifiers: Overpassing Human-Level Performance on ImageNet Classification». В работе Международной конференции IEEE по компьютерному зрению 2015 года, 1026-1034. Вашингтон, округ Колумбия: IEEE Компьютерное Зрение Society, 2015.
Указания и ограничения по применению:
Генерация кода для вычислительной библиотеки ARM не поддерживается для 2-D сгруппированного слоя свертки, который имеет NumGroups
набор свойств больше двух.
Для генерации кода, PaddingValue
параметр должен быть равен 0
, которое является значением по умолчанию.
Указания и ограничения по применению:
Генерация кода для графического процессора ARM Mali не поддерживается для 2-D сгруппированного слоя свертки, который имеет NumGroups
набор свойств как 'channel-wise'
или значение, больше двух.
Для генерации кода, PaddingValue
параметр должен быть равен 0
, которое является значением по умолчанию.
batchNormalizationLayer
| convolution2dLayer
| fullyConnectedLayer
| maxPooling2dLayer
| reluLayer
| trainNetwork
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.