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' (time) размерность входных данных, задайте формат весов '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-by- numChannels-by- numFilters массив, где filterSize - размер 1-D фильтров, numChannels количество каналов входных данных и numFilters количество фильтров.

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

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

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

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

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

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

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

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

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

filterSize(1)-by- filterSize(2)-by- filterSize(3)-by- numChannels-by- 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 имеет размерность несинглтона, затем каждый элемент 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 - количество пространственных размерностей входных данных. The ith элемент вектора задает коэффициент расширения, применяемый к i2ая пространственная размерность.

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

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

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

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

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

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

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

  • Числовая матрица - различное количество заполнения применяется к началу и концу каждой пространственной размерности. Используйте матрицу размера 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' Размерность
СкручиваниеКоличество фильтров
Сгруппированная сверткаКоличество фильтров в группе, умноженное на количество групп

Подробнее о

свернуть все

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

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

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

Введенный в R2019b