exponenta event banner

dlconv

Глубокий учебный сверток

Описание

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

dlconv функция применяет операцию свертки глубокого обучения к dlarray данные. Используя dlarray объекты упрощают работу с высокоразмерными данными, позволяя маркировать размеры. Например, можно пометить, какие измерения соответствуют пространственным, временным, канальным и пакетным измерениям, используя 'S', 'T', 'C', и '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' задает данные для свёртки 2-D с форматом 'SSCB' (пространственный, пространственный, канальный, пакетный).

пример

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

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

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

Применить свертку 2-D используя 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');

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

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

Применить свертку 1-D используя 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'), то эти размеры должны быть упорядочены, как описано в этой таблице.

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

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

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

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

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

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

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

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

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

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

'SSCUU' (пространственный, пространственный, канальный, неуточненный, неуточненный)
Второй 'S' (пространственный) или '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' (пространственный)Ширина фильтра
Треть 'S' (пространственный) или 'T' (время)Глубина фильтра
'C' (канал)Количество каналов
'U' (не указано)Количество фильтров

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

Совет

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

Константа смещения, заданная как отформатированная dlarray, неформатированный dlarray, числовой вектор или числовой скаляр.

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

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

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

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

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

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

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

Размерный порядок неформатированных входных данных, указанный как разделенная запятыми пара, состоящая из 'DataFormat' и вектор символов или строковый скаляр FMT с меткой для каждого измерения данных.

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

  • 'S' - Пространственный

  • 'C' - Канал

  • 'B' - Партия (например, пробы и наблюдения)

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

  • 'U' - Не указано

Можно указать несколько размеров с метками 'S' или 'U'. Можно использовать метки 'C', 'B', и 'T' максимум один раз.

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

Пример: 'DataFormat','SSCB'

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

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

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

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

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

Совет

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Числовой скаляр - одинаковая величина заполнения применяется к обоим концам всех пространственных размеров.

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

  • Числовая матрица - к началу и концу каждого пространственного размера применяется разная величина заполнения. Использовать матрицу размера 2-by-d, где d - количество пространственных измерений входных данных. Элемент (1,d) задает размер заполнения, применяемого к началу пространственного размера d. Элемент (2,d) задает размер заполнения, применяемого к концу пространственного размера d. Например, в 2-D формат [top, left; bottom, right].

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

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

Значение для данных площадки, указанное как одно из следующих значений:

PaddingValueОписаниеПример
СкалярПлощадка с указанным скалярным значением.

[314159265]→[0000000000000000314000015900002650000000000000000]

'symmetric-include-edge'Прокладка с использованием зеркальных значений входных данных, включая значения кромок.

[314159265]→[5115995133144113314415115995622655662265565115995]

'symmetric-exclude-edge'Прокладка с использованием зеркальных значений входных данных, за исключением краевых значений.

[314159265]→[5626562951595141314139515951562656295159514131413]

'replicate'Прокладка с использованием повторяющихся граничных элементов ввода

[314159265]→[3331444333144433314441115999222655522265552226555]

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

свернуть все

Свернутая карта элементов, возвращенная как dlarray с тем же базовым типом данных, что и dlX.

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

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

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

Подробнее

свернуть все

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

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

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

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