dlconv

Свертка глубокого обучения

Описание

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

dlconv функция применяет операцию свертки глубокого обучения к dlarray данные. Используя dlarray объекты делают работу с высокими размерными данными легче, позволяя вам пометить размерности. Например, можно пометить, которому размерности соответствуют пространственный, время, канал, и обрабатывают размерности в пакетном режиме с помощью "S"TC, и "B" метки, соответственно. Для незаданных и других размерностей используйте "U" метка. Для dlarray возразите функциям, которые действуют по конкретным размерностям, можно задать метки размерности путем форматирования dlarray возразите непосредственно, или при помощи DataFormat опция.

Примечание

Применять свертку в layerGraph объект или Layer массив, используйте один из следующих слоев:

пример

dlY = dlconv(dlX,weights,bias) применяет операцию свертки глубокого обучения к отформатированному dlarray объект dlX. Функциональное использование, двигающее сверточные фильтры, задано weights и добавляет постоянный bias. Выход dlY отформатированный dlarray объект с тем же форматом как dlX.

Функция, по умолчанию, применяет операцию свертки до трех измерений dlX пометил 'S' (пространственный). Применять операцию свертки по размерностям пометило 'T' (время), задайте weights с 'T' размерность с помощью отформатированного dlarray возразите или при помощи 'WeightsFormat' опция.

Для бесформатных входных данных используйте 'DataFormat' опция.

пример

dlY = dlconv(dlX,weights,bias,'DataFormat',FMT) применяет операцию свертки глубокого обучения к бесформатному dlarray объект dlX с форматом, заданным FMT использование любого из предыдущих синтаксисов. Выход dlY бесформатный dlarray объект с размерностями в том же порядке как dlX. Например, 'DataFormat','SSCB' задает данные для 2D свертки с форматом 'SSCB' (пространственный, пространственный, канал, пакет).

пример

dlY = dlconv(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" с помощью любого из предыдущих синтаксисов. Например, 'WeightsFormat','TCU' задает веса для 1D свертки с форматом 'TCU' (время, канал, незаданный).

Примеры

свернуть все

Создайте отформатированный dlarray объект, содержащий пакет 128 28 28 изображения с 3 каналами. Задайте формат 'SSCB' (пространственный, пространственный, канал, пакет).

miniBatchSize = 128;
inputSize = [28 28];
numChannels = 3;
X = rand(inputSize(1),inputSize(2),numChannels,miniBatchSize);
dlX = dlarray(X,'SSCB');

Просмотрите размер и формат входных данных.

size(dlX)
ans = 1×4

    28    28     3   128

dims(dlX)
ans = 
'SSCB'

Инициализируйте веса и смещение для 2D свертки. Для весов задайте 64 3х3 фильтра. Для смещения задайте нулевой вектор.

filterSize = [3 3];
numFilters = 64;
weights = rand(filterSize(1),filterSize(2),numChannels,numFilters);
bias = zeros(1,numFilters);

Примените 2D свертку с помощью dlconv функция.

dlY = dlconv(dlX,weights,bias);

Просмотрите размер и формат выхода.

size(dlY)
ans = 1×4

    26    26    64   128

dims(dlY)
ans = 
'SSCB'

Примените операцию свертки к входным данным в трех группах из двух каналов каждый. Примените четыре фильтра на группу.

Создайте входные данные как 10 наблюдений за размером 100 100 с шестью каналами.

height = 100;
width = 100;
channels = 6;
numObservations = 10;

X = rand(height,width,channels,numObservations);
dlX = dlarray(X,'SSCB');

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

filterHeight = 8;
filterWidth = 8;
numChannelsPerGroup = 2;
numFiltersPerGroup = 4;
numGroups = 3;

weights = rand(filterHeight,filterWidth,numChannelsPerGroup,numFiltersPerGroup,numGroups);

Инициализируйте термин смещения.

bias = rand(numFiltersPerGroup*numGroups,1);

Выполните свертку.

dlY = dlconv(dlX,weights,bias);
size(dlY)
ans = 1×4

    93    93    12    10

dims(dlY)
ans = 
'SSCB'

12 каналов свертки выход представляют три группы сверток с четырьмя фильтрами на группу.

Разделите входные данные на каналы и выполните свертку на каждом канале отдельно.

Создайте входные данные как одно наблюдение с размером 64 64 и 10 каналов. Создайте данные как бесформатный dlarray.

height = 64;
width = 64;
channels = 10;

X = rand(height,width,channels);
dlX = dlarray(X);

Инициализируйте сверточные фильтры. Задайте разгруппированную свертку, которая применяет одну свертку ко всем трем каналам входных данных.

filterHeight = 8;
filterWidth = 8;
numChannelsPerGroup = 1;
numFiltersPerGroup = 1;
numGroups = channels;

weights = rand(filterHeight,filterWidth,numChannelsPerGroup,numFiltersPerGroup,numGroups);

Инициализируйте термин смещения.

bias = rand(numFiltersPerGroup*numGroups,1);

Выполните свертку. Задайте метки размерности входных данных с помощью 'DataFormat' опция.

dlY = dlconv(dlX,weights,bias,'DataFormat','SSC');
size(dlY)
ans = 1×3

    57    57    10

К каждому каналу применяют операцию свертки отдельно, таким образом, существует 10 каналов в выходе.

Создайте отформатированный dlarray объект, содержащий 128 последовательностей длины 512 содержащий 5 функций. Задайте формат 'CBT' (образуйте канал, обработайте в пакетном режиме, время).

numChannels = 5;
miniBatchSize = 128;
sequenceLength = 512;
X = rand(numChannels,miniBatchSize,sequenceLength);
dlX = dlarray(X,'CBT');

Инициализируйте веса и смещение для 1D свертки. Для весов задайте 64 фильтра с размером фильтра 3. Для смещения задайте нулевой вектор.

filterSize = 3;
numFilters = 64;
weights = rand(filterSize,numChannels,numFilters);
bias = zeros(1,numFilters);

Примените 1D свертку с помощью dlconv функция. Применять операцию свертки по 'T' (время) размерность входных данных, задайте формат весов 'TCU' (время, канал, незаданный) использование 'WeightsFormat' опция.

dlY = dlconv(dlX,weights,bias,'WeightsFormat','TCU');

Просмотрите размер и формат выхода.

size(dlY)
ans = 1×3

    64   128   510

dims(dlY)
ans = 
'CBT'

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

свернуть все

Входные данные в виде отформатированного dlarray, бесформатный dlarray, или числовой массив.

Если dlX бесформатный dlarray или числовой массив, затем необходимо задать формат с помощью 'DataFormat' опция. Если dlX числовой массив, затем любой weights или bias должен быть dlarray объект.

Функция, по умолчанию, применяет операцию свертки до трех измерений dlX пометил 'S' (пространственный). Применять операцию свертки по размерностям пометило 'T' (время), задайте weights с 'T' размерность с помощью отформатированного dlarray возразите или при помощи 'WeightsFormat' опция.

Сверточные фильтры в виде отформатированного dlarray, бесформатный dlarray, или числовой массив.

Размер и формат весов зависят от типа задачи. Если weights бесформатный dlarray или числовой массив, затем размер и форма weights зависит от 'WeightsFormat' опция.

Следующая таблица описывает размер и формат весов для различных задач. Можно указать, что массив с размерностями в любом порядке с помощью отформатировал dlarray объекты или при помощи 'WeightsFormat' опция. Когда веса имеют несколько размерностей с той же меткой (например, несколько размерностей пометили 'S'), затем те размерности должны быть в упорядоченном как описано в этой таблице.

ЗадачаНеобходимые размерностиРазмерПример
ВесаФормат
1D свертка'S' (пространственный) или 'T' ВремяОтфильтруйте размер

filterSize- numChannels- numFilters массив, где filterSize размер 1D фильтров, numChannels количество каналов входных данных и numFilters количество фильтров.

'SCU' (пространственный, канал, незаданный)
'C' (канал)Количество каналов
'U' (незаданный)Количество фильтров
1D сгруппированная свертка'S' (пространственный) или 'T' ВремяОтфильтруйте размер

filterSize- numChannelsPerGroup- numFiltersPerGroup- numGroups массив, где filterSize размер 1D фильтров, numChannelsPerGroup количество каналов на группу входных данных и numFiltersPerGroup количество фильтров на группу.

numChannelsPerGroup должен равняться количеству каналов входных данных, разделенных на numGroups.

'SCUU' (пространственный, канал, незаданный, незаданный)
'C' (канал)Количество каналов на группу
Первый 'U' (незаданный)Количество фильтров на группу
Второй 'U' (незаданный)Количество групп
2D СверткаПервый 'S' (пространственный)Отфильтруйте высоту

filterSize(1)- filterSize(2)- numChannels- numFilters массив, где filterSize(1) и filterSize(2) высота и ширина 2D фильтров, соответственно, numChannels количество каналов входных данных и numFilters количество фильтров.

'SSCU' (пространственный, пространственный, канал, незаданный)
Секунды (пространственный) или 'T' ВремяОтфильтруйте ширину
'C' (канал)Количество каналов
'U' (незаданный)Количество фильтров
2D сгруппированная сверткаПервый 'S' (пространственный)Отфильтруйте высоту

filterSize(1)- filterSize(2)- numChannelsPerGroup- numFiltersPerGroup- numGroups массив, где filterSize(1) и filterSize(2) высота и ширина 2D фильтров, соответственно, numChannelsPerGroup количество каналов на группу входных данных и numFiltersPerGroup количество фильтров на группу.

numChannelsPerGroup должен равняться количеству каналов входных данных, разделенных на numGroups.

'SSCUU' (пространственный, пространственный, канал, незаданный, незаданный)
Секунды (пространственный) или 'T' ВремяОтфильтруйте ширину
'C' (канал)Количество каналов на группу
Первый 'U' (незаданный)Количество фильтров на группу
Второй 'U' (незаданный)Количество групп
3-D СверткаПервый 'S' (пространственный)Отфильтруйте высоту

filterSize(1)- filterSize(2)- filterSize(3)- numChannels- numFilters массив, где filterSize(1), filterSize(2), и filterSize(3) высота, ширина и глубина 3-D фильтров, соответственно, numChannels количество каналов входных данных и numFilters количество фильтров.

'SSSCU' (пространственный, пространственный, пространственный, канал, незаданный)
Секунды (пространственный)Отфильтруйте ширину
Треть 'S' (пространственный) или 'T' ВремяОтфильтруйте глубину
'C' (канал)Количество каналов
'U' (незаданный)Количество фильтров

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

Совет

Функция, по умолчанию, применяет операцию свертки до трех измерений dlX пометил 'S' (пространственный). Применять операцию свертки по размерностям пометило 'T' (время), задайте weights с 'T' размерность с помощью отформатированного dlarray возразите или при помощи 'WeightsFormat' опция.

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

  • Если bias скаляр, затем то же смещение применяется к каждому выходу.

  • Если bias имеет неодноэлементную размерность, затем каждый элемент bias смещение, применился к соответствующему сверточному фильтру, заданному weights. Число элементов bias должен совпадать с количеством фильтров, заданных weights.

  • Если bias 0, затем термин смещения отключен, и никакое смещение не добавляется во время операции свертки.

Если bias отформатированный dlarray, затем неодноэлементная размерность должна быть размерностью канала с меткой 'C' (канал).

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'DilationFactor',2 устанавливает коэффициент расширения для каждого сверточного фильтра к 2.

Порядок размерности бесформатных входных данных в виде вектора символов или строкового скаляра FMT это обеспечивает метку для каждой размерности данных.

Когда вы задаете формат dlarray объект, каждый символ обеспечивает метку для каждой размерности данных и должен быть одним из следующего:

  • "S" — Пространственный

  • "C" — Канал

  • "B" — Пакет (например, выборки и наблюдения)

  • "T" — Время (например, временные шаги последовательностей)

  • "U" — Незаданный

Можно указать, что несколько размерностей пометили "S" или "U". Можно использовать, маркирует "C"B, и "T" самое большее однажды.

Необходимо задать DataFormat когда входными данными не является отформатированный dlarray.

Типы данных: char | string

Порядок размерности весов в виде разделенной запятой пары, состоящей из 'WeightsFormat' и вектор символов или строковый скаляр, который обеспечивает метку для каждой размерности весов.

Значение по умолчанию 'WeightsFormat' зависит от задачи:

ЗадачаЗначение по умолчанию
1D свертка'SCU' (пространственный, канал, незаданный)
1D сгруппированная свертка'SCUU' (пространственный, канал, незаданный, незаданный)
2D Свертка'SSCU' (пространственный, пространственный, канал, незаданный)
2D сгруппированная свертка'SSCUU' (пространственный, пространственный, канал, незаданный, незаданный)
3-D Свертка'SSSCU' (пространственный, пространственный, пространственный, канал, незаданный)

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

Совет

Функция, по умолчанию, применяет операцию свертки до трех измерений dlX пометил 'S' (пространственный). Применять операцию свертки по размерностям пометило 'T' (время), задайте weights с 'T' размерность с помощью отформатированного dlarray возразите или при помощи 'WeightsFormat' опция.

Пример: 'WeightsFormat','TCU'

Типы данных: char | string

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

Значение по умолчанию 'Stride' 1.

Пример: 'Stride',3

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

Отфильтруйте коэффициент расширения в виде разделенной запятой пары, состоящей из 'DilationFactor' и одно из следующих.

  • Числовой скаляр — то же значение коэффициента расширения применяется для всех пространственных размерностей.

  • Числовой вектор — различное значение коэффициента расширения применяется по каждому пространственному измерению. Используйте вектор из размера d, где d количество пространственных размерностей входных данных. iэлемент th вектора указывает, что коэффициент расширения применился к ith пространственная размерность.

Используйте коэффициент расширения, чтобы увеличить восприимчивое поле фильтра (область входа, который фильтр видит) на входных данных. Используя коэффициент расширения соответствует эффективному размеру фильтра filterSize + (filterSize-1)*(dilationFactor-1).

Пример: 'DilationFactor',2

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

Размер дополнения применился к 'S' и 'T' размерности, данные форматом весов в виде разделенной запятой пары, состоящей из 'Padding' и одно из следующего:

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

  • 'causal' – Примените оставленное дополнение размером (FilterSize - 1) .* DilationFactor. Эта свертка поддержек опции за одно время или пространственную размерность только. Когда Stride 1, выход одного размера с входом.

  • Неотрицательный целочисленный sz — Добавьте дополнение размера sz к обоим концам 'S' или 'T' размерности, данные форматом весов.

  • Вектор из целых чисел sz — Добавьте дополнение размера sz(i) к обоим концам ith 'S' или 'T' размерности, данные форматом весов. Число элементов sz должен совпадать с количеством 'S' или 'T' размерности весов.

  • Матрица целых чисел sz — Добавьте дополнение размера sz(1,i) и sz(2,i) к началу и концу ith 'S' или 'T' размерности, данные форматом весов. Например, для 2D входа, [t l; b r] применяет дополнение размера tBL, и r к верхней части, нижней части, оставленной, и право на вход, соответственно.

Пример: 'Padding','same'

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

Значение, чтобы заполнить данные в виде одного из следующего:

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

Выходные аргументы

свернуть все

Карта функции, к которой применяют операцию свертки, возвращенная как dlarray с тем же базовым типом данных как dlX.

Если входные данные dlX отформатированный dlarray, затем dlY имеет тот же формат как dlX. Если входными данными не является отформатированный dlarray, затем dlY бесформатный dlarray с той же размерностью заказывают как входные данные.

Размер 'C' (канал) размерность dlY зависит от задачи.

ЗадачаРазмер 'C' Размерность
СверткаКоличество фильтров
Сгруппированная сверткаКоличество фильтров на группу, умноженную на количество групп

Больше о

свернуть все

Свертка глубокого обучения

dlconv функция применяет скользящие фильтры свертки к входным данным. dlconv функционируйте свертка поддержек в один, два, или три пространственных размерности или одно измерение времени. Чтобы узнать больше о свертке глубокого обучения, см. определение сверточного слоя на convolution2dLayer страница с описанием.

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

Введенный в R2019b