exponenta event banner

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 и '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 с метками или без них или числовым массивом. weights параметр определяет размер и значения фильтров, а также количество фильтров и число групп для сгруппированных транспонированных сверток.

Укажите веса как filterSizeоколо-numFiltersPerGroupоколо-numChannelsPerGroupоколо-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 имеет nonsingleton размерность, каждый элемент bias - смещение, применяемое к соответствующему сверточному фильтру, указанному weights. Количество элементов bias должно соответствовать количеству фильтров, указанному в weights.

Если bias является отформатированным dlarray, размер nonsingleton должен быть размером канала с меткой '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 - количество пространственных измерений входных данных. i-й элемент вектора определяет коэффициент расширения, применяемый к i-й пространственный размер.

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

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

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

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

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

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

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

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