padsequences

Дополните или обрезайте данные последовательности до той же длины

    Описание

    пример

    XPad = padsequences(X,paddingDim) заполняет последовательности в массиве ячеек X вдоль размерности, заданной как paddingDim. Функция добавляет заполнение в конце каждой последовательности, чтобы соответствовать размеру самой длинной последовательности в X. Заполненные последовательности конкатенируются, и функция возвращается XPad как массив.

    пример

    [XPad,mask] = padsequences(X,paddingDim) дополнительно возвращает логический массив, представляющий положения исходных данных последовательности в XPad, . Положение значений true или 1 в mask соответствуют положениям данных исходной последовательности в XPad; значения false или 0 соответствуют заполненным значениям.

    пример

    [___] = padsequences(X,paddingDim,Name,Value) задает опции, использующие один или несколько аргументов имя-значение в дополнение к входным и выходным аргументам в предыдущих синтаксисах. Для примера, 'PaddingValue','left' добавляет заполнение к началу исходной последовательности.

    Примеры

    свернуть все

    Данные последовательности панелей готовы к обучению.

    Загрузите данные последовательности.

    s = japaneseVowelsTrainData;

    Предварительно обработанные данные содержат 270 наблюдений каждый с 12 функциями последовательности. Длина наблюдений варьируется от 7 до 26 временных шагов.

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

    sPad = padsequences(s,2);

    Исследуйте размер заполненных последовательностей.

    size(sPad)
    ans = 1×3
    
        12    26   270
    
    

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

    Загрузите данные последовательности.

    s = japaneseVowelsTrainData;

    Предварительно обработанные данные содержат 270 наблюдений каждый с 12 функциями последовательности. Длина наблюдений варьируется от 7 до 26 временных шагов.

    Обработайте данные так, чтобы каждая последовательность была в точности 14 временных шагов. Для более коротких последовательностей требуется заполнение, в то время как более длинные последовательности должны быть усечены. Дополните или обрезайте с обеих сторон данных. Для заполненных последовательностей примените симметричное заполнение так, чтобы заполненные значения были зеркальными отражениями исходных значений последовательности.

    [sPad,mask] = padsequences(s,2,'Length',14,'Direction','both','PaddingValue','symmetric');

    Сравните некоторые заполненные последовательности с исходной последовательностью. Каждое наблюдение содержит 12 функции, поэтому извлеките одну функцию для сравнения.

    Извлеките первую функцию 74-го наблюдения. Эта последовательность короче 14 временных шагов.

    s{74}(1,:)
    ans = 1×9
    
        0.6691    0.5291    0.3820    0.3107    0.2546    0.1942    0.0931   -0.0179   -0.1081
    
    
    sPad(1,:,74)
    ans = 1×14
    
        0.5291    0.6691    0.6691    0.5291    0.3820    0.3107    0.2546    0.1942    0.0931   -0.0179   -0.1081   -0.1081   -0.0179    0.0931
    
    
    mask(1,:,74)
    ans = 1×14 logical array
    
       0   0   1   1   1   1   1   1   1   1   1   0   0   0
    
    

    Функция центрирует последовательность и вкладки в обоих концах, отражая значения в концах последовательности. Маска показывает расположение исходных значений последовательности.

    Извлеките первую функцию 28-го наблюдения. Эта последовательность длиннее 14 временных шагов.

    s{28}(1,:)
    ans = 1×16
    
        1.1178    1.0772    1.2365    1.4858    1.6191    1.4893    1.2791    1.4692    1.5592    1.5112    1.5144    1.5871    1.4848    1.2978    1.1336    1.0280
    
    
    sPad(1,:,28)
    ans = 1×14
    
        1.0772    1.2365    1.4858    1.6191    1.4893    1.2791    1.4692    1.5592    1.5112    1.5144    1.5871    1.4848    1.2978    1.1336
    
    
    mask(1,:,28)
    ans = 1×14 logical array
    
       1   1   1   1   1   1   1   1   1   1   1   1   1   1
    
    

    Функция центрирует последовательность и обрезает на обоих концах. Маска показывает, что все данные в полученной последовательности являются частью исходной последовательности.

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

    В примере используются обучающие данные о распознавании активности. Данные содержат шесть временных рядов данных о датчике, полученных с носимого на корпусе смартфона. Каждая последовательность имеет три функции и изменяется в длине. Три функции соответствуют показаниям акселерометра в трех разных направлениях.

    Загрузите обучающие данные. Объедините данные и метки в один datastore.

    s = load("HumanActivityTrain.mat");
    
    dsXTrain = arrayDatastore(s.XTrain,'OutputType','same');
    dsYTrain = arrayDatastore(s.YTrain,'OutputType','same');
    
    dsTrain = combine(dsXTrain,dsYTrain);

    Использование minibatchqueue для обработки мини-пакетов данных последовательности. Задайте пользовательскую функцию мини-пакетной предварительной обработки preprocessMiniBatch (определено в конце этого примера), чтобы заполнить данные последовательности и метки, и с одним горячим кодированием последовательности меток. Чтобы также вернуть маску заполненных данных, задайте три выходные переменные для minibatchqueue объект.

    miniBatchSize = 2;
    mbq = minibatchqueue(dsTrain,3,...
        'MiniBatchSize',miniBatchSize,...
        'MiniBatchFcn', @preprocessMiniBatch);

    Проверьте размер мини-пакетов.

    [X,Y,mask] = next(mbq);
    size(X)
    ans = 1×3
    
               3       64480           2
    
    
    size(mask)
    ans = 1×3
    
               3       64480           2
    
    

    Каждый мини-пакет имеет два наблюдения. Функция заполняет последовательности таким же размером, как и самая длинная последовательность в мини-пакете. Маска имеет тот же размер, что и заполненные последовательности, и показывает местоположение исходных значений данных в заполненных данных последовательности.

    size(Y)
    ans = 1×3
    
               5       64480           2
    
    

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

    function [xPad,yPad,mask] = preprocessMiniBatch(X,Y)
        [xPad,mask] = padsequences(X,2);
        yPad = padsequences(Y,2);
        yPad = onehotencode(yPad,1);
    end

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

    свернуть все

    Последовательности для дополнения, заданные как вектор камер числовых или категориальных массивов.

    Типы данных: cell

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

    Пример: 2

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

    Пример: padsequences(X,'Length','shortest','Direction','both') обрезает последовательности на каждом конце, чтобы соответствовать длине самой короткой входной последовательности.

    Длина заполненных последовательностей, заданная как одно из следующего:

    • 'longest' - Дополните каждую входную последовательность такой же длиной, как и самую длинную входную последовательность.

    • 'shortest' - Обрезать каждую входную последовательность до той же длины, что и самую короткую входную последовательность.

    • Положительное целое число - Дополните или обрезайте каждую входную последовательность до заданной длины.

    Пример: padsequences(X,'Length','shortest')

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

    Направление заполнения или усечения, заданное как одно из следующего:

    • 'right' - Дополните или обрезайте в конце каждой исходной последовательности.

    • 'left' - Дополните или обрезайте в начале каждой исходной последовательности.

    • 'both' - Дополните или обрезайте в начале и конце каждой исходной последовательности. Половина необходимого заполнения или усечения применяется к каждому концу последовательности.

    Пример: padsequences(X,'Direction','both')

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

    Значение, используемое для заполнения входа, задается как одно из следующего:

    • 'auto' - Определите значение [добавления автоматически в зависимости от типа данных входных последовательностей. Числовые последовательности заполнены 0. Категориальные последовательности заполнены <undefined>.

    • 'symmetric' - Дополните каждую последовательность зеркальным отражением себя.

    • Числовой скаляр - Дополните каждую последовательность заданным числовым значением.

    • Категориальный скаляр - Дополните каждую последовательность заданным категориальным значением.

    Пример: padsequences(X,'PaddingValue','symmetric')

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categorical

    Флаг для возврата заполненных данных как равномерного массива, заданный в виде числа или логического 1 (true) или 0 (false). Когда вы устанавливаете значение 0, XPad возвращается как вектор камеры с таким же размером и базовым типом данных, как и вход X.

    Пример: padsequences(X,'UniformOutput',0)

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

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

    свернуть все

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

    Если вы задаете UniformOutput имя-значение, опция к true или 1функция объединяет заполненные последовательности по последней размерности. Последняя размерность XPad имеет тот же размер, что и количество последовательностей во входных X. XPad - массив с N + 1 размерности, где N количество размерностей массивов последовательностей в X. XPad имеет тот совпадающий тип данных, что и массивы во входных X.

    Если вы задаете UniformOutput имя-значение, опция к false или 0функция возвращает заполненные последовательности в виде вектора камеры с таким же размером и базовым типом данных, как и вход X.

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

    mask имеет тот же размер и тип данных, что и XPad. Значения 1 в mask соответствуют положениям исходных значений последовательности в XPad. Значения 0 соответствуют заполненным значениям.

    Использование mask исключить заполненные значения из вычислений потерь с помощью "Mask" name-value опции в crossentropy функция.

    Введенный в R2021a