convolution2dLayer

Описание

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

Создание

Описание

layer = convolution2dLayer(filterSize,numFilters) создает 2-D сверточный слой и устанавливает FilterSize и NumFilters свойства.

пример

layer = convolution2dLayer(filterSize,numFilters,Name,Value) устанавливает дополнительный Stride, DilationFactor, NumChannels, Параметры и инициализация, Темп обучения и регуляризация, и Name свойства с использованием пар "имя-значение". Чтобы задать вход сигнала, используйте 'Padding' аргумент пары "имя-значение". Для примера, convolution2dLayer(11,96,'Stride',4,'Padding',1) создает 2-D сверточный слой с 96 фильтрами размера [11 11], шаг [4 4]и заполнение размера 1 по всем ребрам входного слоя. Можно задать несколько пары "имя-значение". Заключайте каждое имя свойства в одинарные кавычки.

Входные параметры

расширить все

Аргументы в виде пар имя-значение

Используйте аргументы пары "имя-значение", разделенные запятыми, чтобы задать размер заполнения для добавления вдоль ребер входа слоя или задать Stride, DilationFactor, NumChannels, Параметры и инициализация, Темп обучения и регуляризация, и Name свойства. Имена заключаются в одинарные кавычки.

Пример: convolution2dLayer(3,16,'Padding','same') создает 2-D сверточный слой с 16 фильтрами размера [3 3] и '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).

Свойства

расширить все

Скручивание

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

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

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

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

Пример: 96

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

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

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

Примечание

Padding свойство будет удалено в следующем релизе. Использование PaddingSize вместо этого. При создании слоя используйте 'Padding' аргумент пары "имя-значение" для определения размера заполнения.

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

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

Значение для данных заполнения, заданное как одно из следующего:

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

[314159265][0000000000000000314000015900002650000000000000000]

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

[314159265][5115995133144113314415115995622655662265565115995]

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

[314159265][5626562951595141314139515951562656295159514131413]

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

[314159265][3331444333144433314441115999222655522265552226555]

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

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

Если NumChannels является 'auto'затем программное обеспечение определяет количество каналов во время обучения.

Пример: 256

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

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

  • 'glorot' - Инициализируйте веса с помощью инициализатора Glorot [4] (также известного как инициализатор Xavier). Инициализатор Glorot независимо выбирает из равномерного распределения с нулем среднего и отклонением 2/(numIn + numOut), где numIn = FilterSize(1)*FilterSize(2)*NumChannels и numOut = FilterSize(1)*FilterSize(2)*NumFilters.

  • 'he' - Инициализируйте веса с помощью инициализатора He [5]. Инициализатор He производит выборки из нормального распределения с нулем среднего и отклонением 2/numIn, где numIn = FilterSize(1)*FilterSize(2)*NumChannels.

  • '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)-by- FilterSize(2)-by- NumChannels-by- NumFilters массив.

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

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

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

Во время обучения Bias является 1 на 1-бай- NumFilters массив.

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

Примеры

свернуть все

Создайте сверточный слой с 96 фильтрами, каждый с высотой и шириной 11. Используйте полосу (размер шага) 4 в горизонтальном и вертикальном направлениях.

layer = convolution2dLayer(11,96,'Stride',4)
layer = 
  Convolution2DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [11 11]
       NumChannels: 'auto'
        NumFilters: 96
            Stride: [4 4]
    DilationFactor: [1 1]
       PaddingMode: 'manual'
       PaddingSize: [0 0 0 0]
      PaddingValue: 0

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

Включите сверточный слой в Layer массив.

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer]
layers = 
  7x1 Layer array with layers:

     1   ''   Image Input             28x28x1 images with 'zerocenter' normalization
     2   ''   Convolution             20 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
     3   ''   ReLU                    ReLU
     4   ''   Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     5   ''   Fully Connected         10 fully connected layer
     6   ''   Softmax                 softmax
     7   ''   Classification Output   crossentropyex

Чтобы задать веса и функции инициализатора смещения, используйте WeightsInitializer и BiasInitializer свойства соответственно. Чтобы задать веса и смещения непосредственно, используйте Weights и Bias свойства соответственно.

Задайте функции инициализации

Создайте сверточный слой с 32 фильтрами, каждый с высотой и шириной 5 и укажите инициализатор весов, который будет инициализатором He.

filterSize = 5;
numFilters = 32;
layer = convolution2dLayer(filterSize,numFilters, ...
    'WeightsInitializer','he')
layer = 
  Convolution2DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [5 5]
       NumChannels: 'auto'
        NumFilters: 32
            Stride: [1 1]
    DilationFactor: [1 1]
       PaddingMode: 'manual'
       PaddingSize: [0 0 0 0]
      PaddingValue: 0

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

Обратите внимание, что Weights и Bias свойства пусты. Во время обучения программное обеспечение инициализирует эти свойства с помощью заданных функций инициализации.

Задайте пользовательские функции инициализации

Чтобы задать свою собственную функцию инициализации для весов и смещений, установите WeightsInitializer и BiasInitializer свойства указателю на функцию. Для этих свойств задайте указатели на функцию, которые берут размер весов и смещений как вход и выводят инициализированное значение.

Создайте сверточный слой с 32 фильтрами, каждый с высотой и шириной 5 и задайте инициализаторы, которые отбирают веса и смещения из Гауссова распределения со стандартным отклонением 0,0001.

filterSize = 5;
numFilters = 32;

layer = convolution2dLayer(filterSize,numFilters, ...
    'WeightsInitializer', @(sz) rand(sz) * 0.0001, ...
    'BiasInitializer', @(sz) rand(sz) * 0.0001)
layer = 
  Convolution2DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [5 5]
       NumChannels: 'auto'
        NumFilters: 32
            Stride: [1 1]
    DilationFactor: [1 1]
       PaddingMode: 'manual'
       PaddingSize: [0 0 0 0]
      PaddingValue: 0

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

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

Задайте веса и смещение непосредственно

Создайте полносвязный слой с размером выходом 10 и установите веса и смещение равными W и b в файле MAT Conv2dWeights.mat соответственно.

filterSize = 5;
numFilters = 32;
load Conv2dWeights

layer = convolution2dLayer(filterSize,numFilters, ...
    'Weights',W, ...
    'Bias',b)
layer = 
  Convolution2DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [5 5]
       NumChannels: 3
        NumFilters: 32
            Stride: [1 1]
    DilationFactor: [1 1]
       PaddingMode: 'manual'
       PaddingSize: [0 0 0 0]
      PaddingValue: 0

   Learnable Parameters
           Weights: [5x5x3x32 double]
              Bias: [1x1x32 double]

  Show all properties

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

Предположим, что размер входа составляет 28 на 28 на 1. Создайте сверточный слой с 16 фильтрами, каждый высотой 6 и шириной 4. Установите горизонтальный и вертикальный шаг равным 4.

Убедитесь, что свертка полностью закрывает вход. Чтобы свертка полностью покрыла вход, и горизонтальный, и вертикальный выходные размерности должны быть целыми числами. Чтобы горизонтальная выходная размерность была целым, в верхней и нижней части изображения требуется одна строка заполнения: (28 - 6 + 2 * 1 )/4 + 1 = 7. Для того, чтобы вертикальная выходная размерность была целым числом, заполнение нуля не требуется: (28 - 4 + 2 * 0 )/4 + 1 = 7.

Создайте сверточный слой.

layer = convolution2dLayer([6 4],16,'Stride',4,'Padding',[1 0])
layer = 
  Convolution2DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [6 4]
       NumChannels: 'auto'
        NumFilters: 16
            Stride: [4 4]
    DilationFactor: [1 1]
       PaddingMode: 'manual'
       PaddingSize: [1 1 0 0]
      PaddingValue: 0

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

Подробнее о

расширить все

Вопросы совместимости

расширить все

Поведение изменено в R2019a

Ссылки

[1] LeCun, Y., B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, and L. D. Jackel. «Распознавание рукописных цифр в сети обратного распространения». В усовершенствованиях в системах обработки нейронной информации 2 (Д. Туретцки, изд.). Сан-Франциско: Морган Кауфманн, 1990.

[2] LeCun, Y., L. Bottou, Y. Bengio, and P. Haffner. «Обучение на основе градиента, применяемое к распознаванию документов». Материалы IEEE. Том 86, № 11, 1998, стр. 2278-2324.

[3] Мерфи, К. П. Машинное обучение: вероятностная перспектива. Cambridge, MA: MIT Press, 2012.

[4] Глорот, Ксавьер и Йошуа Бенгио. «Понимание сложности обучения нейронных сетей с глубоким Feedforward». В работе тринадцатой Международной конференции по искусственному интеллекту и статистике, 249-356. Сардиния, Италия: AISTATS, 2010.

[5] 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.

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

..
Введенный в R2016a

[1] Изображение кредит: Свертка арифметика (лицензия)