exponenta event banner

convolution3dLayer

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.

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

Пример: 96

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

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

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

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

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

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

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

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

Пример: 256

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

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

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

  • 'he' - Инициализируйте веса с помощью инициализатора He [2]. Выборка инициализатора He из нормального распределения с нулевым средним и дисперсией 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 функция.

Пример: 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-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. Укажите инициализатор весов в качестве инициализатора He.

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

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

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