3-D сверточный слой
3-D сверточный слой применяет скользящие кубовидные фильтры свертки к 3D входу. Слой применяет операцию свертки к входу путем перемещения фильтров вдоль входа вертикально, горизонтально, и вдоль глубины, вычисления скалярного произведения весов и входа, и затем добавления срока смещения.
создает 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'
— Введите дополнение ребра
(значение по умолчанию) | массив неотрицательных целых чисел | '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
— Размер шага для того, чтобы пересечь вход
(значение по умолчанию) | вектор трех положительных целых чиселРазмер шага для того, чтобы пересечь вход в трех измерениях, заданных как векторный [a b c]
из трех положительных целых чисел, где a
вертикальный размер шага, b
горизонтальный размер шага и c
размер шага вдоль глубины. При создании слоя можно задать Stride
как скаляр, чтобы использовать то же значение в размерах шага во всех трех направлениях.
Пример:
[2 3 1]
задает вертикальный размер шага 2, горизонтальный размер шага 3 и размер шага вдоль глубины 1.
DilationFactor
— Фактор для расширенной свертки
(значение по умолчанию) | вектор трех положительных целых чиселФактор для расширенной свертки (также известный 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.
PaddingSize
— Размер дополнения
(значение по умолчанию) | 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'
опция к скаляру или вектору неотрицательных целых чисел, затем программное обеспечение автоматически устанавливает PaddingMode
к 'manual'
.
Если вы устанавливаете 'Padding'
опция к 'same'
, затем программное обеспечение автоматически устанавливает PaddingMode
к 'same'
и вычисляет размер дополнения в учебное время так, чтобы выход имел тот же размер как вход, когда шаг равняется 1. Если шаг больше, чем 1, то выходным размером является ceil(inputSize/stride)
, где inputSize
высота, ширина или глубина входа и stride
шаг в соответствующей размерности. Программное обеспечение добавляет тот же объем дополнения к верху и низу, налево и праву, и к передней и задней части, если это возможно. Если дополнение в данной размерности имеет нечетное значение, то программное обеспечение добавляет дополнительное дополнение во вход как постдополнение. Другими словами, программное обеспечение добавляет дополнительное вертикальное дополнение в нижнюю часть, дополнительное горизонтальное дополнение направо и дополнительное дополнение глубины к задней части входа.
NumChannels
— Количество каналов для каждого фильтра'auto'
(значение по умолчанию) | положительное целое числоКоличество каналов для каждого фильтра, заданного как 'auto'
или положительное целое число.
Этот параметр всегда равен количеству каналов входа к сверточному слою. Например, если вход является цветным изображением, то количество каналов для входа равняется 3. Если количество фильтров для сверточного слоя до текущего слоя равняется 16, то количество каналов для текущего слоя равняется 16.
Если NumChannels
'auto'
, затем программное обеспечение определяет количество каналов в учебное время.
Пример:
256
WeightsInitializer
— Функция, чтобы инициализировать веса'glorot'
(значение по умолчанию) | 'he'
| 'narrow-normal'
| 'zeros'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать веса, заданные как одно из следующего:
'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
BiasInitializer
— Функция, чтобы инициализировать смещение'zeros'
(значение по умолчанию) | 'narrow-normal'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать смещение, заданное как одно из следующего:
'zeros'
– Инициализируйте смещение с нулями.
'ones'
– Инициализируйте смещение с единицами.
'narrow-normal'
– Инициализируйте смещение путем независимой выборки от нормального распределения с нулевым средним и стандартным отклонением 0.01.
Указатель на функцию – Инициализирует смещение с пользовательской функцией. Если вы задаете указатель на функцию, то функция должна иметь форму bias = func(sz)
, где sz
размер смещения.
Слой только инициализирует смещение когда Bias
свойство пусто.
Типы данных: char |
string
| function_handle
Weights
— Веса слоя[]
(значение по умолчанию) | числовой массивВеса слоя для сверточного слоя, заданного как числовой массив.
Веса слоя являются learnable параметрами. Можно задать начальное значение для весов непосредственно с помощью Weights
свойство слоя. При обучении сети, если Weights
свойство слоя непусто, затем trainNetwork
использует Weights
свойство как начальное значение. Если Weights
свойство пусто, затем trainNetwork
использует инициализатор, заданный WeightsInitializer
свойство слоя.
В учебное время, Weights
FilterSize(1)
- FilterSize(2)
- FilterSize(3)
- NumChannels
- NumFilters
массив.
Типы данных: single
| double
Bias
— Смещения слоя[]
(значение по умолчанию) | числовой массивСлой смещает для сверточного слоя, заданного как числовой массив.
Смещения слоя являются learnable параметрами. При обучении сети, если 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] 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] 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] 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] 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-th, выходная размерность вычисляется как (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. Необходимо распределить дополнение асимметрично на передней и задней части изображения. Этот пример добавляет одну плоскость нулевого дополнения к задней части изображения.
Создайте сверточный слой. Задайте 'Дополнение' как 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] Learnable Parameters Weights: [] Bias: [] Show all properties
Сверточный слой применяет скользящие сверточные фильтры к входу. 3-D сверточный слой расширяет функциональность 2D сверточного слоя к третьей размерности, глубине. Слой применяет операцию свертки к входу путем перемещения фильтров вдоль входа вертикально, горизонтально, и вдоль глубины, вычисления скалярного произведения весов и входа, и затем добавления срока смещения. Чтобы узнать больше, см. определение сверточного слоя на convolution2dLayer
страница с описанием.
[1] Glorot, Ксавьер и Иосуа Бенхио. "Изучая трудность учебных глубоких нейронных сетей feedforward". В Продолжениях тринадцатой международной конференции по вопросам искусственного интеллекта и статистики, стр 249-256. 2010.
[2] Он, Kaiming, Сянюй Чжан, Шаоцин Жэнь и Цзянь Сунь. "Копаясь глубоко в выпрямителях: Превосходная производительность человеческого уровня на imagenet классификации". В Продолжениях международной конференции IEEE по вопросам компьютерного зрения, стр 1026-1034. 2015.
convolution2dLayer
| globalAveragePooling3dLayer
| image3dInputLayer
| maxPooling3dLayer
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.