convolution3dLayer

3-D сверточный слой

Описание

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

Создание

Описание

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

пример

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

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

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

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

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

Пример: convolution3dLayer(3,16,'Padding','same') создает 3-D сверточный слой с 16 фильтрами размера [3 3 3] и 'same' дополнение. В учебное время программное обеспечение вычисляет и устанавливает размер дополнения так, чтобы слой выход имел тот же размер как вход.

Введите дополнение ребра в виде разделенной запятой пары, состоящей из 'Padding' и одно из этих значений:

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

  • Неотрицательный целочисленный p — Добавьте дополнение размера p ко всем ребрам входа.

  • Трехэлементный векторный [a b c] из неотрицательных целых чисел — Добавляют дополнение размера a к верху и низу, дополнению размера b налево и право и дополнение размера c к передней и задней части входа.

  • Матрица 2 на 3 [t l f;b r k] из неотрицательных целых чисел — Добавляют дополнение размера t к верхней части, b к нижней части, l налево, r направо, f к передней стороне и k к задней части входа. Другими словами, верхняя строка задает предварительное дополнение, и вторая строка задает постдополнение в трех измерениях.

Пример: 'Padding',1 добавляет одна строка дополнения к верху и низу, одному столбцу дополнения налево и права и одной плоскости дополнения к передней и задней части входа.

Пример: 'Padding','same' добавляет дополнение так, чтобы выход имел тот же размер как вход (если шаг равняется 1).

Свойства

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

Свертка

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

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

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

Это свойство доступно только для чтения.

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

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

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

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

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

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

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

Пример: [2 3 1] расширяет фильтр вертикально на коэффициент 2, горизонтально на коэффициент 3, и вдоль глубины на коэффициент 1.

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

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

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

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

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

  • Если вы устанавливаете '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' или положительное целое число.

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

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

Пример: 256

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

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

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

  • 'he' – Инициализируйте веса Им инициализатор [2]. Он выборки инициализатора от нормального распределения с нулевым средним значением и отклонением 2/numIn, где numIn = FilterSize(1)*FilterSize(2)*FilterSize(3)*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)- FilterSize(2)- FilterSize(3)- NumChannels- NumFilters массив.

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

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

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

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

Типы данных: 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-D слой свертки с 16 фильтрами, каждого с высотой, шириной и глубиной 5. Используйте шаг (размер шага) 4 во всех трех направлениях.

layer = convolution3dLayer(5,16,'Stride',4)
layer = 
  Convolution3DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [5 5 5]
       NumChannels: 'auto'
        NumFilters: 16
            Stride: [4 4 4]
    DilationFactor: [1 1 1]
       PaddingMode: 'manual'
       PaddingSize: [2x3 double]
      PaddingValue: 0

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

Включайте 3-D слой свертки в Layer массив.

layers = [ ...
    image3dInputLayer([28 28 28 3])
    convolution3dLayer(5,16,'Stride',4)
    reluLayer
    maxPooling3dLayer(2,'Stride',4)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer]
layers = 
  7x1 Layer array with layers:

     1   ''   3-D Image Input         28x28x28x3 images with 'zerocenter' normalization
     2   ''   Convolution             16 5x5x5 convolutions with stride [4  4  4] and padding [0  0  0; 0  0  0]
     3   ''   ReLU                    ReLU
     4   ''   3-D Max Pooling         2x2x2 max pooling with stride [4  4  4] and padding [0  0  0; 0  0  0]
     5   ''   Fully Connected         10 fully connected layer
     6   ''   Softmax                 softmax
     7   ''   Classification Output   crossentropyex

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

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

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

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

              Name: ''

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

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

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

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

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

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

filterSize = 5;
numFilters = 32;

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

              Name: ''

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

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

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

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

Создайте 3-D сверточный слой, совместимый с цветными изображениями. Установите веса и смещение к W и b в файле MAT Conv3dWeights.mat соответственно.

filterSize = 5;
numFilters = 32;
load Conv3dWeights

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

              Name: ''

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

   Learnable Parameters
           Weights: [5-D double]
              Bias: [1x1x1x32 double]

  Show all properties

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

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

Убедитесь, что свертка покрывает вход полностью. Для свертки, чтобы полностью покрыть вход, выходные размерности должны быть целыми числами. Когда нет никакого расширения, i-ая выходная размерность вычисляется как (imageSize (i) - filterSize (i) + дополняющий (i)) / шаг (i) + 1.

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

  • Для вертикальной выходной размерности, чтобы быть целым числом, не требуется никакое дополнение: (28 – 4 + 0)/4 + 1 = 7.

  • Поскольку глубина вывела размерность, чтобы быть целым числом, одна плоскость дополнения требуется: (28 – 5 + 1)/4 + 1 = 7. Необходимо распределить дополнение асимметрично на передней и задней части изображения. Этот пример добавляет одну плоскость дополнения к задней части изображения.

Создайте сверточный слой. Задайте 'Padding' как матрица 2 на 3. Первая строка задает предварительное дополнение, и вторая строка задает постдополнение в трех измерениях.

layer = convolution3dLayer([6 4 5],16,'Stride',4,'Padding',[1 0 0;1 0 1])
layer = 
  Convolution3DLayer with properties:

              Name: ''

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

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

Больше о

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

Ссылки

[1] Glorot, Ксавьер и Иосуа Бенхио. "Изучая Трудность Учебных Глубоких Нейронных сетей Прямого распространения". В Продолжениях Тринадцатой Международной конференции по вопросам Искусственного интеллекта и Статистики, 249–356. Сардиния, Италия: AISTATS, 2010.

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

Введенный в R2019a