2D сгруппированный сверточный слой
2D сгруппированный сверточный слой разделяет входные каналы на группы и применяет скользящие сверточные фильтры. Используйте сгруппированные сверточные слои в отделимом мудром каналом (также известный мудрыми глубиной отделимый) свертка.
Для каждой группы слой применяет операцию свертки к входу путем перемещения фильтров вдоль входа вертикально и горизонтально и вычисления скалярного произведения весов и входа, и затем добавления срока смещения. Слой комбинирует свертки для каждой группы независимо. Если количество групп равно количеству каналов, то этот слой выполняет мудрую каналом свертку.
создает 2D сгруппированный сверточный слой и устанавливает 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')
создает 2D сгруппированный сверточный слой с 2 группами из 128 фильтров размера [5 5]
и заполняет вход к тому, так, чтобы выход имел тот же размер. Можно задать несколько пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки.
Используйте разделенные от запятой аргументы пары "имя-значение", чтобы задать размер нулевого дополнения, чтобы добавить вдоль ребер входа слоя или установить Stride
, DilationFactor
, Параметры и инициализация, изучите уровень и регуляризацию и Name
свойства. Заключите имена в одинарные кавычки.
groupedConvolution2dLayer(5,128,2,'Padding','same')
создает 2D сгруппированный сверточный слой с 2 группами из 128 фильтров размера [5 5]
и заполняет вход к тому, так, чтобы выход имел тот же размер.'Padding'
— Введите дополнение ребра
(значение по умолчанию) | вектор неотрицательных целых чисел | '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
— Размер шага для того, чтобы пересечь вход
(значение по умолчанию) | вектор двух положительных целых чиселРазмер шага для того, чтобы пересечь вход вертикально и горизонтально, заданный как векторный [a b]
из двух положительных целых чисел, где a
вертикальный размер шага и b
горизонтальный размер шага. При создании слоя можно задать Stride
как скаляр, чтобы использовать то же значение в обоих размерах шага.
Пример:
[2 3]
задает вертикальный размер шага 2 и горизонтальный размер шага 3.
DilationFactor
— Фактор для расширенной свертки
(значение по умолчанию) | вектор двух положительных целых чиселФактор для расширенной свертки (также известный atrous свертка), заданный как векторный [h w]
из двух положительных целых чисел, где h
вертикальное расширение и w
горизонтальное расширение. При создании слоя можно задать DilationFactor
как скаляр, чтобы использовать то же значение и в горизонтальных и в вертикальных расширениях.
Используйте расширенные свертки, чтобы увеличить восприимчивое поле (область входа, который слой видит) слоя, не увеличивая число параметров или расчета.
Слой расширяет фильтры путем вставки нулей между каждым элементом фильтра. Фактор расширения определяет размер шага для выборки входа или эквивалентно фактора повышающей дискретизации фильтра. Это соответствует эффективному размеру фильтра (Filter Size – 1).* Dilation Factor + 1. Например, 3х3 фильтр с фактором расширения [2 2]
эквивалентно фильтру 5 на 5 с нулями между элементами.
Пример: [2 3]
PaddingSize
— Размер дополнения
(значение по умолчанию) | вектор четырех неотрицательных целых чиселРазмер дополнения, чтобы применяться к входным границам, заданным как векторный [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
шаг в соответствующей размерности. Программное обеспечение добавляет тот же объем дополнения к верху и низу, и налево и право, если это возможно. Если дополнение, которое должно быть добавлено вертикально, имеет нечетное значение, то программное обеспечение добавляет дополнительное дополнение в нижнюю часть. Если дополнение, которое должно быть добавлено горизонтально, имеет нечетное значение, то программное обеспечение добавляет дополнительное дополнение направо.
NumChannelsPerGroup
— Количество каналов на группу'auto'
(значение по умолчанию) | положительное целое числоКоличество каналов на группу, заданную как 'auto'
или положительное целое число. Количество каналов на группу равно количеству входных каналов, разделенных на количество групп.
Программное обеспечение автоматически устанавливает это свойство в учебное время.
Пример:
256
WeightsInitializer
— Функция, чтобы инициализировать веса'glorot'
(значение по умолчанию) | 'he'
| 'narrow-normal'
| 'zeros'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать веса, заданные как одно из следующего:
'glorot'
– Инициализируйте веса с инициализатором Glorot [1] (также известный как инициализатор Ксавьера). Инициализатор Glorot независимо выборки от равномерного распределения с нулевым средним значением и отклонением 2/(numIn + numOut)
, где numIn = FilterSize(1)*FilterSize(2)*NumChannelsPerGroup
и numOut = FilterSize(1)*FilterSize(2)*NumFiltersPerGroup
.
'he'
– Инициализируйте веса с Ним инициализатор [2]. Он выборки инициализатора от нормального распределения с нулевым средним значением и отклонением 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
— Веса слоя[]
(значение по умолчанию) | числовой массивВеса слоя для слоя, заданного как числовой массив.
Веса слоя являются learnable параметрами. Можно задать начальное значение для весов непосредственно с помощью Weights
свойство слоя. При обучении сети, если Weights
свойство слоя непусто, затем trainNetwork
использует Weights
свойство как начальное значение. Если Weights
свойство пусто, затем trainNetwork
использует инициализатор, заданный WeightsInitializer
свойство слоя.
В учебное время, Weights
FilterSize(1)
- FilterSize(2)
- NumChannelsPerGroup
- NumFiltersPerGroup
- NumGroups
массив, где NumInputChannels
количество каналов входа слоя.
Типы данных: single
| double
Bias
— Смещения слоя[]
(значение по умолчанию) | числовой массивСлой смещает для слоя, заданного как числовой массив.
Смещения слоя являются learnable параметрами. При обучении сети, если Bias
непусто, затем trainNetwork
использует Bias
свойство как начальное значение. Если Bias
пусто, затем trainNetwork
использует инициализатор, заданный BiasInitializer
.
В учебное время, Bias
1 1 NumFiltersPerGroup
- 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] 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] 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] Glorot, Ксавьер и Иосуа Бенхио. "Изучая трудность учебных глубоких нейронных сетей feedforward". В Продолжениях тринадцатой международной конференции по вопросам искусственного интеллекта и статистики, стр 249-256. 2010.
[2] Он, Kaiming, Сянюй Чжан, Шаоцин Жэнь и Цзянь Сунь. "Копаясь глубоко в выпрямителях: Превосходная производительность человеческого уровня на imagenet классификации". В Продолжениях международной конференции IEEE по вопросам компьютерного зрения, стр 1026-1034. 2015.
batchNormalizationLayer
| convolution2dLayer
| fullyConnectedLayer
| maxPooling2dLayer
| reluLayer
| trainNetwork
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.