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 object. The axes object 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 object. The axes object 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 object. The axes object 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, бесформатный dlarray, или числовой массив. Когда dlX не отформатированный dlarray, необходимо задать формат этикетки размерности с помощью 'DataFormat' опция. Если dlX числовой массив, затем любой weights или bias должен быть dlarray.

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

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

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

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

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

    Входные данные 'S' РазмерностиfilterSize
    1Dh, где h соответствует высоте фильтра
    2D 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 должен совпадать с количеством фильтров, заданных.

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

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

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

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

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

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

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

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

  • "C" — Канал

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

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

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

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

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

Типы данных: 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

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

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

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

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

  • Числовая матрица — различное значение обрезки применяется к началу и концу каждой пространственной размерности. Используйте матрицу размера 2 d, где d количество пространственных размерностей входных данных. Элемент (1,d) указывает, что обрезка применилась к запуску пространственной размерности d. Элемент (2,d) задает обрезку, примененную в конец пространственной размерности d. Например, в 2D форматом является [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