exponenta event banner

groupedConvolution2dLayer

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

Описание

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

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

Создание

Описание

пример

layer = groupedConvolution2dLayer(filterSize,numFiltersPerGroup,numGroups) создает 2-D сгруппированный сверточный слой и задает 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' и одно из этих значений:

  • '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 convolution), определяемый как вектор [h w] двух положительных целых чисел, где h - вертикальное расширение и w - горизонтальное расширение. При создании слоя можно указать DilationFactor в качестве скаляра для использования одного и того же значения как для горизонтальных, так и для вертикальных расширений.

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

Слой расширяет фильтры, вставляя нули между каждым элементом фильтра. Коэффициент расширения определяет размер шага для выборки входного сигнала или эквивалентный коэффициент повышения дискретизации фильтра. Он соответствует эффективному размеру фильтра (размер фильтра - 1). * Коэффициент расширения + 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]

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

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

Пример: 256

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

Функция для инициализации весов, указанных как одно из следующих:

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

Функция инициализации смещения, указанная как одно из следующих:

  • '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-by-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]
           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] Глорот, Ксавье и Йошуа Бенгио. «Понимание сложности обучения глубоким нейронным сетям». Материалы тринадцатой Международной конференции по искусственному интеллекту и статистике, 249-356. Сардиния, Италия: AISTATS, 2010.

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

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

..
Представлен в R2019a