groupedConvolution2dLayer

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

Описание

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

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

Создание

Описание

пример

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 шаг в соответствующей размерности. Программное обеспечение добавляет то же самое значение дополнения к верху и низу, и налево и право, если это возможно. Если дополнение, которое должно быть добавлено вертикально, имеет нечетное значение, то программное обеспечение добавляет дополнительное дополнение в нижнюю часть. Если дополнение, которое должно быть добавлено горизонтально, имеет нечетное значение, то программное обеспечение добавляет дополнительное дополнение направо.

Значение, чтобы заполнить данные в виде одного из следующего:

PaddingValueОписаниеПример
СкалярЗаполните заданным скалярным значением.

[314159265][0000000000000000314000015900002650000000000000000]

'symmetric-include-edge'Заполните зеркально отраженные значения использования входа, включая значения ребра.

[314159265][5115995133144113314415115995622655662265565115995]

'symmetric-exclude-edge'Заполните зеркально отраженные значения использования входа, исключая значения ребра.

[314159265][5626562951595141314139515951562656295159514131413]

'replicate'Заполните использование повторенные элементы границы входа

[314159265][3331444333144433314441115999222655522265552226555]

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

Количество каналов на группу в виде '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.

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

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

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

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

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

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

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

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

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

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

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

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

Веса слоя для слоя в виде числового массива.

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

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

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

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

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

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

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

Скорость обучения и регуляризация

Фактор скорости обучения для весов в виде неотрицательного скаляра.

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Фактор скорости обучения для смещений в виде неотрицательного скаляра.

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Слой

Имя слоя в виде вектора символов или строкового скаляра. Для Layer вход массивов, trainNetwork, assembleNetwork, layerGraph, и dlnetwork функции автоматически присваивают имена к слоям с 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]
           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] Glorot, Ксавьер и Иосуа Бенхио. "Изучая Трудность Учебных Глубоких Нейронных сетей Прямого распространения". В Продолжениях Тринадцатой Международной конференции по вопросам Искусственного интеллекта и Статистики, 249–356. Сардиния, Италия: AISTATS, 2010.

[2] Он, Kaiming, Сянюй Чжан, Шаоцин Жэнь и Цзянь Сунь. "Копаясь Глубоко в Выпрямителях: Превышение Эффективности Человеческого Уровня на Классификации ImageNet". В Продолжениях 2 015 Международных конференций IEEE по вопросам Компьютерного зрения, 1026–1034. Вашингтон, округ Колумбия: Общество Компьютерного зрения IEEE, 2015.

Расширенные возможности

Введенный в R2019a