dltranspconv

Глубокое обучение транспонировало свертку

Описание

Операция транспонированной свертки повышает качество карты функций.

Примечание

Эта функция применяет операцию транспонированной свертки глубокого обучения к dlarray данные. Если вы хотите применить транспонированную свертку в layerGraph объект или Layer массив, используйте один из следующих слоев:

пример

dlY = dltranspconv(dlX,weights,bias) вычисляет транспонированную свертку входного сигнала глубокого обучения dlX использование фильтров, заданных как weights, и добавляет постоянную bias. Область входа dlX является форматированным dlarray с метками размерностей. Транспонированная свертка действует на размерности, которые вы задаете как 'S' и 'C' размерности. Область выхода dlY является форматированным dlarray с теми же метками размерностей, что и dlX.

dlY = dltranspconv(dlX,weights,bias,'DataFormat',FMT) также задает формат размерности FMT когда dlX не является форматированным dlarray. Область выхода dlY является неформатированным dlarray с тем же порядком размерностей, что и dlX.

пример

dlY = dltranspconv(___Name,Value) задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущих синтаксисах. Для примера, 'Stride',3 задает шаг операции свертки.

Примеры

свернуть все

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

Импортируйте данные изображения и преобразуйте его в dlarray.

X = imread('sherlock.jpg');
dlX = dlarray(single(X),'SSC');

Отобразите изображение.

imshow(X)

Figure contains an axes. The axes contains an object of type image.

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

filterHeight = 10;
filterWidth = 10;
numChannelsPerGroup = 3;
numFiltersPerGroup = 1;
numGroups = 1;

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

Выполните свертку. Использование 'Stride' значение 2 и a 'DilationFactor' значение 2.

dlY = dlconv(dlX,weights,bias,'Stride',2,'DilationFactor',3);

Отобразите свернутое изображение.

Y = extractdata(dlY);
imshow(rescale(Y))

Figure contains an axes. The axes contains an object of type image.

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

numChannelsPerGroupTC = 1;
numFiltersPerGroupTC = 3;

weightsTC = rand(filterHeight,filterWidth,numFiltersPerGroupTC,numChannelsPerGroupTC,numGroups);
biasTC = rand(numFiltersPerGroupTC*numGroups,1);

Выполните транспонированную свертку. Используйте тот же шаг и коэффициент расширения, что и для операции свертки.

dlZ = dltranspconv(dlY,weightsTC,biasTC,'Stride',2,'DilationFactor',3);

Отображение изображения после транспонированной свертки.

Z = extractdata(dlZ);
imshow(rescale(Z))

Figure contains an axes. The axes contains an object of type image.

Сравните размер оригинального изображения, свернутого изображения и изображения после транспонированной свертки.

sizeX = size(X)
sizeX = 1×3

   640   960     3

sizeY = size(Y)
sizeY = 1×2

   307   467

sizeZ = size(Z)
sizeZ = 1×3

   640   960     3

Транспонированная свертка увеличивает значение свернутых данных до размера исходных входных данных.

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

Создайте входные данные как десять наблюдений размера 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,numFiltersPerGroup,numChannelsPerGroup,numGroups);

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

bias = rand(numFiltersPerGroup*numGroups,1);

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

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

   107   107    12    10

dims(dlY)
ans = 
'SSCB'

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

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

свернуть все

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

Свертка действует на размеры, которые вы задаете как пространственные размерности, используя 'S' размерность. Можно задать до три размерности в dlX как 'S' размерности.

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

Фильтры, заданные как dlarray с метками или числовым массивом или без них. The weights аргумент задает размер и значения фильтров, а также количество фильтров и количество групп для сгруппированных транспонированных сверток.

Задайте веса как filterSize-by- numFiltersPerGroup-by- numChannelsPerGroup-by- numGroups массив.

  • filterSize - Размер сверточных фильтров. filterSize может иметь до три размерности, в зависимости от количества пространственных размерностей в входных данных.

    Входные данные 'S' РазмерностиfilterSize
    1-Dh, где h соответствует высоте фильтра
    2-D h -by - w, где h и w соответствуют высоте и ширине фильтра, соответственно
    3-Dh -by- w -by- d, где h, w и d соответствуют высоте, ширине и глубине фильтра, соответственно

  • numFiltersPerGroup - Количество фильтров, применяемых в каждой группе.

  • numChannelsPerGroup - Количество каналов в каждой группе для сгруппированных транспонированных сверток. numChannelsPerGroup должно равняться количеству каналов во входных данных, разделенных на numGroups, количество групп. Для сгруппированных сверток, где numGroups = 1, numChannelsPerGroup должен равняться количеству каналов в входных данных.

  • numGroups - Количество групп (необязательно). Когда numGroups > 1функция выполняет сгруппированные транспонированные свертки. Когда numGroups = 1функция выполняет несгруппированные транспонированные свертки; в этом случае эта размерность является синглтоном и может быть опущено.

Если weights является форматированным dlarray, он может иметь несколько пространственные размерности, помеченных 'S', одна размерность канала отмечена 'C'и до двух других размерностей, маркированных 'U'. Количество 'S' размерности должны совпадать с количеством 'S' размерности входных данных. Маркированные размерности соответствуют спецификациям фильтра следующим образом.

Спецификация фильтраРазмерности
filterSizeДо трех 'S' размерности
numFiltersPerGroup'C' размерность
numChannelsPerGroupПервый 'U' размерность
numGroups (необязательно)Второй 'U' размерность

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

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

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

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

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

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

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

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

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

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

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

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

  • 'C' - Канал

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

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

  • 'U' - Не определено

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обрезка, примененная к ребрам данных, задается как разделенная разделенными запятой парами, состоящая из 'Cropping' и одно из следующих.

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

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

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

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

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

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

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

свернуть все

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

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

Размер 'C' размерность канала dlY зависит от размера weights вход. Размер 'C' размерность выхода Y является продуктом размера размерностей numFiltersPerGroup и numGroups в weights аргумент. Если weights является форматированным dlarray, этот продукт такой же как продукт размера 'C' размерность и второе 'U' размерность.

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

Введенный в R2019b