3-D слой свертки
Сверточный слой 3-D применяет скользящие кубоидные фильтры свертки к трехмерному входу. Слой свертывает вход, перемещая фильтры вдоль входных параметров вертикально, горизонтально и вдоль глубины, вычисляя скалярный продукт весов и входных параметров, а затем добавляя термин смещения.
создает 3-D сверточный слой и устанавливает layer
= convolution3dLayer(filterSize
,numFilters
)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'
- Вход ребра0
(по умолчанию) | массив неотрицательных целых чисел | '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).
FilterSize
- Высота, ширина и глубина фильтровВысота, ширина и глубина фильтров, заданная в виде вектора [h w d]
из трех положительных целых чисел, где h
- высота, w
- ширина, и d
- глубина. FilterSize
определяет размер локальных областей, с которыми нейроны соединяются во входе.
При создании слоя можно задать FilterSize
в качестве скаляра для использования того же значения высоты, ширины и глубины.
Пример:
[5 5 5] задает фильтры с высотой, шириной и глубиной 5.
NumFilters
- Количество фильтровКоличество фильтров, заданное в виде положительного целого числа. Это количество соответствует количеству нейронов в сверточном слое, которые соединяются с одной и той же областью на входе. Этот параметр определяет количество каналов (функции) в выходе сверточного слоя.
Пример:
96
Stride
- Размер шага для обхода входа[1 1 1]
(по умолчанию) | вектор из трех положительных целых чиселРазмер шага для прохождения входа в трёх размерностях, заданный как вектор [a b c]
из трех положительных целых чисел, где a
- вертикальный размер шага, b
- горизонтальный размер шага, и c
- размер шага по глубине. При создании слоя можно задать Stride
в качестве скаляра для использования того же значения для размеров шагов во всех трех направлениях.
Пример:
[2 3 1] задает размер шага по вертикали 2, размер шага по горизонтали 3 и размер шага по глубине 1.
DilationFactor
- Коэффициент расширения свертки[1 1 1]
(по умолчанию) | вектор из трех положительных целых чиселФактор для расширенной свертки (также известный как атронная свертка), заданный как вектор [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 раз.
PaddingSize
- Размер заполнения[0 0 0;0 0 0]
(по умолчанию) | матрицу 2 на 3 неотрицательных целых чиселРазмер заполнения для применения к входным границам, заданный как матрица 2 на 3 [t l f;b r k]
неотрицательных целых чисел, где t
и b
является ли заполнение приложенным к верхней части и дну в вертикальном направлении, l
и r
заполнение применяется слева и справа в горизонтальном направлении, и f
и k
- заполнение, нанесенное спереди и сзади на глубину. Другими словами, верхняя строка задает предварительную добавку, а вторая строка определяет отложенную добавку в трёх размерностях.
Когда вы создаете слой, используйте 'Padding'
аргумент пары "имя-значение" для определения размера заполнения.
Пример:
[1 2 4;1 2 4] добавляет одну строку заполнения к верхней части и дну, две колонны заполнения слева и справа и четыре плоскости заполнения к передней и задней частям входа.
PaddingMode
- Метод определения размера заполнения'manual'
(по умолчанию) | 'same'
Метод определения размера заполнения, заданный как 'manual'
или 'same'
.
Программа автоматически устанавливает значение PaddingMode
на основе значения 'Padding', заданного при создании слоя.
Если вы задаете 'Padding'
опция скаляру или вектору неотрицательных целых чисел, затем программа автоматически устанавливает PaddingMode
на 'manual'
.
Если вы задаете 'Padding'
опция для 'same'
, затем программное обеспечение автоматически устанавливает PaddingMode
на 'same'
и вычисляет размер заполнения во время обучения так, чтобы выход имел тот же размер, что и вход, когда шаг равен 1. Если шаг больше 1, то выходной размер ceil(inputSize/stride)
, где inputSize
- высота, ширина или глубина входных и stride
входов - шаг в соответствующей размерности. Программное обеспечение добавляет одинаковое количество заполнения в верхнюю часть и дно, слева и справа, а также спереди и сзади, если это возможно. Если заполнение в заданной размерности имеет нечетное значение, то программное обеспечение добавляет дополнительное заполнение ко входу как отложение. Другими словами, программное обеспечение добавляет дополнительное вертикальное заполнение дна, дополнительное горизонтальное заполнение справа и дополнительное заполнение глубины задней части входа.
PaddingValue
- Значение для заполнения данных'symmetric-include-edge'
| 'symmetric-exclude-edge'
| 'replicate'
Значение для данных заполнения, заданное как одно из следующего:
PaddingValue | Описание | Пример |
---|---|---|
Скаляр | Дополните с заданным скалярным значением. |
|
'symmetric-include-edge' | Заполните используя зеркальные значения входов, включая значения ребер. |
|
'symmetric-exclude-edge' | Заполните используя зеркальные значения входов, исключая значения ребер. |
|
'replicate' | Заполните с использованием повторяющихся элементов границы входов |
|
NumChannels
- Количество каналов для каждого фильтра'auto'
(по умолчанию) | положительное целое числоКоличество каналов для каждого фильтра, заданное как 'auto'
или положительное целое число.
Этот параметр всегда равен количеству каналов входа в сверточный слой. Для примера, если вход является цветным изображением, то количество каналов для входа равно 3. Если количество фильтров для сверточного слоя перед текущим слоем составляет 16, то количество каналов для текущего слоя составляет 16.
Если NumChannels
является 'auto'
затем программное обеспечение определяет количество каналов во время обучения.
Пример:
256
WeightsInitializer
- Функция для инициализации весов'glorot'
(по умолчанию) | 'he'
| 'narrow-normal'
| 'zeros'
| 'ones'
| указатель на функциюФункция для инициализации весов, заданная как одно из следующего:
'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
BiasInitializer
- Функция для инициализации смещения'zeros'
(по умолчанию) | 'narrow-normal'
| 'ones'
| указатель на функциюФункция для инициализации смещения, заданная как одно из следующего:
'zeros'
- Инициализируйте смещение с нулями.
'ones'
- Инициализируйте смещение с таковые.
'narrow-normal'
- Инициализируйте смещение путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.
Указатель на функцию - Инициализируйте смещение с помощью пользовательской функции. Если вы задаете указатель на функцию, то функция должна иметь вид bias = func(sz)
, где sz
- размер смещения.
Слой инициализирует смещение только тогда, когда Bias
свойство пустое.
Типы данных: char
| string
| function_handle
Weights
- Веса слоев[]
(по умолчанию) | числовой массивВеса слоев для сверточного слоя, заданные как числовой массив.
Веса слоев являются настраиваемыми параметрами. Можно задать начальное значение для весов непосредственно с помощью Weights
свойство слоя. При обучении сети, если Weights
свойство слоя непусто, тогда trainNetwork
использует Weights
свойство как начальное значение. Если на Weights
свойство пустое, тогда trainNetwork
использует инициализатор, заданный как WeightsInitializer
свойство слоя.
Во время обучения Weights
является FilterSize(1)
-by- FilterSize(2)
-by- FilterSize(3)
-by- NumChannels
-by- NumFilters
массив.
Типы данных: single
| double
Bias
- Смещения слоев[]
(по умолчанию) | числовой массивСмещения слоев для сверточного слоя, заданные как числовой массив.
Смещения слоя являются настраиваемыми параметрами. При обучении сети, если Bias
непусто, тогда trainNetwork
использует Bias
свойство как начальное значение. Если Bias
пуст, тогда trainNetwork
использует инициализатор, заданный как BiasInitializer
.
Во время обучения Bias
1 на 1 на 1 NumFilters
массив.
Типы данных: single
| double
WeightLearnRateFactor
- Коэффициент скорости обучения для весовКоэффициент скорости обучения для весов, заданный как неотрицательный скаляр.
Программа умножает этот коэффициент на глобальный темп обучения, чтобы определить скорость обучения для весов на этом слое. Для примера, если WeightLearnRateFactor
равен 2, тогда скорость обучения для весов на этом слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, заданных в trainingOptions
функция.
Пример: 2
BiasLearnRateFactor
- Коэффициент скорости обучения для смещенийКоэффициент скорости обучения для смещений, заданный как неотрицательный скаляр.
Программа умножает этот коэффициент на глобальную скорость обучения, чтобы определить скорость обучения для смещений на этом слое. Для примера, если BiasLearnRateFactor
равен 2, тогда скорость обучения для смещений в слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, заданных в trainingOptions
функция.
Пример: 2
WeightL2Factor
- L2 коэффициент регуляризации для весовL2 регуляризации для весов, заданный как неотрицательный скаляр.
Программа умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для весов на этом слое. Для примера, если WeightL2Factor
равен 2, тогда L2 регуляризация для весов в этом слое в два раза превышает глобальный коэффициент регуляризации L2. Можно задать глобальный коэффициент регуляризации L2 с помощью trainingOptions
функция.
Пример: 2
BiasL2Factor
- L2 коэффициент регуляризации для смещенийL2 регуляризации для смещений, заданный как неотрицательный скаляр.
Программа умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для смещений на этом слое. Для примера, если BiasL2Factor
равен 2, тогда L2 регуляризация для смещений в этом слое в два раза превышает глобальный коэффициент регуляризации L2. Можно задать глобальный коэффициент регуляризации L2 с помощью trainingOptions
функция.
Пример: 2
Name
- Имя слоя''
(по умолчанию) | символьный вектор | строковый скаляр
Имя слоя, заданное как вектор символов или строковый скаляр. Чтобы включить слой в график слоев, необходимо задать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с слоем и Name
установлено в ''
затем программа автоматически присваивает слою имя во время обучения.
Типы данных: char
| string
NumInputs
- Количество входовКоличество входов слоя. Этот слой принимает только один вход.
Типы данных: double
InputNames
- Входные имена{'in'}
(по умолчанию)Входные имена слоя. Этот слой принимает только один вход.
Типы данных: cell
NumOutputs
- Количество выходовКоличество выходов слоя. Этот слой имеет только один выход.
Типы данных: double
OutputNames
- Выходные имена{'out'}
(по умолчанию)Выходные имена слоя. Этот слой имеет только один выход.
Типы данных: 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) )/stride (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
Сверточный слой применяет скользящие сверточные фильтры к входу. Сверточный слой 3-D расширяет функциональность сверточного слоя 2-D до третьей размерности, глубины. Слой свертывает вход, перемещая фильтры вдоль входных параметров вертикально, горизонтально и вдоль глубины, вычисляя скалярный продукт весов и входных параметров, а затем добавляя термин смещения. Чтобы узнать больше, смотрите определение сверточного слоя на convolution2dLayer
страница с описанием.
[1] Глорот, Ксавьер и Йошуа Бенгио. «Понимание сложности обучения нейронных сетей с глубоким Feedforward». В работе тринадцатой Международной конференции по искусственному интеллекту и статистике, 249-356. Сардиния, Италия: AISTATS, 2010.
[2] 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.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.