groupedConvolution2dLayer

2D сгруппированный сверточный слой

Описание

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

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

Создание

Синтаксис

layer = groupedConvolution2dLayer(filterSize,numFiltersPerGroup,numGroups)
layer = groupedConvolution2dLayer(filterSize,numFiltersPerGroup,'channel-wise')
layer = groupedConvolution2dLayer(___,Name,Value)

Описание

пример

layer = groupedConvolution2dLayer(filterSize,numFiltersPerGroup,numGroups) создает 2D сгруппированный сверточный слой и устанавливает 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' — Добавьте дополнение размера, вычисленного программным обеспечением при обучении или время прогноза так, чтобы вывод имел тот же размер как вход, когда шаг равняется 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).

Свойства

развернуть все

Сгруппированная свертка

Высота и ширина фильтров, заданных как векторный [h w] двух положительных целых чисел, где h является высотой и w, являются шириной. FilterSize задает размер локальных областей, с которыми нейроны соединяются во входе.

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

Пример: [5 5] задает фильтры с высотой 5 и шириной 5.

Количество фильтров на группу, заданную как положительное целое число. Это свойство определяет количество каналов в выводе слоя. Количеством выходных каналов является FiltersPerGroup * NumGroups.

Пример: 10

Количество групп, заданных как положительное целое число или 'channel-wise'.

Если NumGroups является 'channel-wise', то программное обеспечение создает слой для мудрой каналом свертки (также известный как мудрую глубиной свертку). В этом случае слой определяет свойство NumGroups в учебное время. Это значение эквивалентно установке NumGroups к количеству входных каналов.

Количество групп должно равномерно разделить количество каналов входа слоя.

Пример 2

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

Пример: [2 3] задает вертикальный размер шага 2 и горизонтальный размер шага 3.

Фактором для расширенной свертки (также известный atrous свертка), заданный как векторный [h w] двух положительных целых чисел, где h является вертикальным расширением и w, является горизонтальное расширение. При создании слоя можно задать DilationFactor как скаляр, чтобы использовать то же значение и для горизонтальных и для вертикальных расширений.

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

Слой расширяет фильтры путем вставки нулей между каждым элементом фильтра. Фактор расширения определяет размер шага для выборки входа или эквивалентно фактора повышающей дискретизации фильтра. Это соответствует эффективному размеру фильтра (Filter Size – 1).* Dilation Factor + 1. Например, 3х3 фильтр с фактором расширения [2 2] эквивалентен фильтру 5 на 5 с нулями между элементами.

Пример: [2 3]

Размер дополнения, чтобы применяться к входным границам, заданным как векторный [t b l r] четырех неотрицательных целых чисел, где t является дополнением, применился к верхней части, b является дополнением, применился к нижней части, l является дополнением, примененным налево, и r является дополнением, примененным направо.

Когда вы создадите слой, используйте аргумент пары "имя-значение" 'Padding', чтобы задать дополнительный размер.

Пример: [1 1 2 2] добавляет одну строку дополнения к верху и низу и два столбца дополнения налево и права на вход.

Метод, чтобы определить дополнительный размер, заданный как 'manual' или 'same'.

Программное обеспечение автоматически устанавливает значение PaddingMode на основе значения 'Padding', которое вы задаете при создании слоя.

  • Если вы устанавливаете опцию 'Padding' на скаляр или вектор неотрицательных целых чисел, то программное обеспечение автоматически устанавливает PaddingMode на 'manual'.

  • Если вы устанавливаете опцию 'Padding' на 'same', то программное обеспечение автоматически устанавливает PaddingMode на 'same' и вычисляет размер дополнения в учебное время так, чтобы вывод имел тот же размер как вход, когда шаг равняется 1. Если шаг больше, чем 1, то выходным размером является ceil(inputSize/stride), где inputSize является высотой или шириной входа, и stride является шагом в соответствующей размерности. Программное обеспечение добавляет тот же объем дополнения к верху и низу, и налево и право, если это возможно. Если дополнение, которое должно быть добавлено вертикально, имеет нечетное значение, то программное обеспечение добавляет дополнительное дополнение в нижнюю часть. Если дополнение, которое должно быть добавлено горизонтально, имеет нечетное значение, то программное обеспечение добавляет дополнительное дополнение направо.

Количество каналов на группу, заданную как 'auto' или положительное целое число. Количество каналов на группу равно количеству входных каналов, разделенных на количество групп.

Программное обеспечение автоматически устанавливает это свойство в учебное время.

Пример: 256

Параметры и инициализация

Функция, чтобы инициализировать веса, заданные как одно из следующего:

  • '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.

  • нули Инициализируйте веса с нулями.

  • единицы Инициализируйте веса с единицами.

  • Указатель на функцию – Инициализирует веса с пользовательской функцией. Если вы задаете указатель на функцию, то функция должна иметь форму weights = func(sz), где sz является размером весов. Для примера смотрите, Задают Пользовательскую Функцию Инициализации Веса.

Слой только инициализирует веса, когда свойство Weights пусто.

Типы данных: char | string | function_handle

Функция, чтобы инициализировать смещение, заданное как одно из следующего:

  • нули Инициализируйте смещение с нулями.

  • единицы Инициализируйте смещение с единицами.

  • 'narrow-normal' – Инициализируйте смещение путем независимой выборки от нормального распределения с нулевым средним и стандартным отклонением 0.01.

  • Указатель на функцию – Инициализирует смещение с пользовательской функцией. Если вы задаете указатель на функцию, то функция должна иметь форму bias = func(sz), где sz является размером смещения.

Слой только инициализирует смещение, когда свойство Bias пусто.

Типы данных: char | string | function_handle

Веса слоя для слоя, заданного как числовой массив.

Веса слоя являются learnable параметрами. Можно задать начальное значение для весов непосредственно с помощью свойства Weights слоя. При обучении сети, если свойство Weights слоя непусто, то trainNetwork использует свойство Weights в качестве начального значения. Если свойство Weights пусто, то trainNetwork использует инициализатор, заданный свойством WeightsInitializer слоя.

В учебное время Weights является FilterSize(1)-by-FilterSize(2)-by-NumChannelsPerGroup-by-NumFiltersPerGroup-by-NumGroups массив, где NumInputChannels является количеством каналов входа слоя.

Типы данных: single | double

Слой смещает для слоя, заданного как числовой массив.

Смещения слоя являются learnable параметрами. При обучении сети, если Bias непуст, то trainNetwork использует свойство Bias в качестве начального значения. Если Bias пуст, то trainNetwork использует инициализатор, заданный BiasInitializer.

В учебное время Bias является 1 1 NumFiltersPerGroup NumGroups массивом.

Типы данных: single | double

Изучите уровень и регуляризацию

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

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

Пример 2

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

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

Пример 2

Фактор регуляризации L2 для весов, заданных как неотрицательный скаляр.

Программное обеспечение умножает этот фактор на глобальный фактор регуляризации L2, чтобы определить регуляризацию L2 для весов в этом слое. Например, если WeightL2Factor равняется 2, то регуляризация L2 для весов в этом слое является дважды глобальным фактором регуляризации L2. Можно задать глобальный фактор регуляризации L2 использование функции trainingOptions.

Пример 2

Фактор регуляризации L2 для смещений, заданных как неотрицательный скаляр.

Программное обеспечение умножает этот фактор на глобальный фактор регуляризации L2, чтобы определить регуляризацию L2 для смещений в этом слое. Например, если BiasL2Factor равняется 2, то регуляризация L2 для смещений в этом слое является дважды глобальным фактором регуляризации L2. Можно задать глобальный фактор регуляризации L2 использование функции trainingOptions.

Пример 2

Слой

Имя слоя, заданное как вектор символов или скаляр строки. Чтобы включать слой в график слоя, необходимо задать непустое уникальное имя слоя. Если вы обучаете серийную сеть со слоем, и Name установлен в '', то программное обеспечение автоматически присваивает имя к слою в учебное время.

Типы данных: char | string

Количество входных параметров слоя. Этот слой принимает один вход только.

Типы данных: double

Введите имена слоя. Этот слой принимает один вход только.

Типы данных: cell

Количество выходных параметров слоя. Этот слой имеет один вывод только.

Типы данных: double

Выведите имена слоя. Этот слой имеет один вывод только.

Типы данных: 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.

Введенный в R2019a