sequenceInputLayer

Входной слой последовательности

Описание

Входной слой последовательности вводит данные последовательности в сеть.

Создание

Описание

layer = sequenceInputLayer(inputSize) создает входной слой последовательности и устанавливает InputSize свойство.

пример

layer = sequenceInputLayer(inputSize,Name,Value) устанавливает дополнительный Normalization, Mean, и Name свойства с использованием пар "имя-значение". Можно задать несколько пары "имя-значение". Заключайте каждое имя свойства в одинарные кавычки.

Свойства

расширить все

Вход изображений

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

  • Для входов векторной последовательности, InputSize является скаляром, соответствующим количеству функций.

  • Для 2-D входы последовательности изображений, InputSize является вектором трех элементов [h w c], где h - высота изображения, w - ширина изображения и c - количество каналов изображения.

  • Для 3-D входы последовательности изображений, InputSize - вектор четырех элементов [h w d c], где h - высота изображения, w - ширина изображения, d - глубина изображения и c - количество каналов изображения.

Пример: 100

Нормализация данных для применения каждый раз, когда данные передаются вперед через слой входа, заданная как одно из следующего:

  • 'zerocenter' - Вычесть среднее значение, заданное как Mean.

  • 'zscore' - Вычесть среднее значение, заданное как Mean и разделите по StandardDeviation.

  • 'rescale-symmetric' - Переформулируйте вход в области значений [-1, 1] с помощью минимального и максимального значений, заданных Min и Max, соответственно.

  • 'rescale-zero-one' - Переопределите вход в области значений [0, 1] с помощью минимального и максимального значений, заданных Min и Max, соответственно.

  • 'none' - Не нормализуйте входные данные.

  • указатель на функцию - Нормализуйте данные с помощью заданной функции. Функция должна иметь вид Y = func(X), где X - входные данные и выходные Y - нормированные данные.

Совет

По умолчанию программа автоматически вычисляет статистику нормализации во время обучения. Чтобы сэкономить время при обучении, укажите необходимую статистику для нормализации и установите 'ResetInputNormalization' опция в trainingOptions на false.

Если входные данные содержат заполнение, слой игнорирует значения заполнения при нормализации входных данных.

Нормализующая размерность, заданная как одно из следующего:

  • 'auto' - Если опция обучения false и вы задаете любую из статистики нормализации (Mean, StandardDeviation, Min, или Max), затем нормализуйте по размерностям, соответствующим статистике. В противном случае пересчитайте статистику во время обучения и примените нормализацию по каналу.

  • 'channel' - Нормализация по каналам.

  • 'element' - Поэлементная нормализация.

  • 'all' - Нормализуйте все значения с помощью скалярной статистики.

Среднее значение для нормализации с нулевым центром и z-результатом, заданное в виде числового массива или пустое.

  • Для входов векторной последовательности, Mean должен быть InputSize-by-1 вектор средств на канал, числовой скаляр или [].

  • Для 2-D входы последовательности изображений, Mean должен быть числовым массивом того же размера, что и InputSize, a 1 на 1-by- InputSize(3) массив средств на канал, числовой скаляр или [].

  • Для 3-D входы последовательности изображений, Mean должен быть числовым массивом того же размера, что и InputSize, 1 на 1 на 1 InputSize(4) массив средств на канал, числовой скаляр или [].

Если вы задаете Mean свойство, затем Normalization должен быть 'zerocenter' или 'zscore'. Если Mean является []затем программное обеспечение вычисляет среднее значение во время обучения.

Можно задать это свойство при создании сетей без обучения (для примера, при сборке сетей с помощью assembleNetwork).

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

Стандартное отклонение, используемое для нормализации z-балла, задается как числовой массив, числовой скаляр или пустой.

  • Для входов векторной последовательности, StandardDeviation должен быть InputSize-by-1 вектор стандартных отклонений на канал, числовой скаляр или [].

  • Для 2-D входы последовательности изображений, StandardDeviation должен быть числовым массивом того же размера, что и InputSize, a 1 на 1-by- InputSize(3) массив стандартных отклонений на канал, числовой скаляр или [].

  • Для 3-D входы последовательности изображений, StandardDeviation должен быть числовым массивом того же размера, что и InputSize, 1 на 1 на 1 InputSize(4) массив стандартных отклонений на канал или числовой скаляр.

Если вы задаете StandardDeviation свойство, затем Normalization должен быть 'zscore'. Если StandardDeviation является []затем программное обеспечение вычисляет стандартное отклонение во время обучения.

Можно задать это свойство при создании сетей без обучения (для примера, при сборке сетей с помощью assembleNetwork).

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

Минимальное значение для перемасштабирования, заданное как числовой массив или пустое.

  • Для входов векторной последовательности, Min должен быть InputSize-by-1 вектор средств на канал или числовой скаляр.

  • Для 2-D входы последовательности изображений, Min должен быть числовым массивом того же размера, что и InputSize, a 1 на 1-by- InputSize(3) массив минимумов на канал или числовой скаляр.

  • Для 3-D входы последовательности изображений, Min должен быть числовым массивом того же размера, что и InputSize, 1 на 1 на 1 InputSize(4) массив минимумов на канал или числовой скаляр.

Если вы задаете Min свойство, затем Normalization должен быть 'rescale-symmetric' или 'rescale-zero-one'. Если Min является []затем программное обеспечение вычисляет минимумы во время обучения.

Можно задать это свойство при создании сетей без обучения (для примера, при сборке сетей с помощью assembleNetwork).

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

Максимальное значение для перемасштабирования, заданное как числовой массив или пустое.

  • Для входов векторной последовательности, Max должен быть InputSize-by-1 вектор средств на канал или числовой скаляр.

  • Для 2-D входы последовательности изображений, Max должен быть числовым массивом того же размера, что и InputSize, a 1 на 1-by- InputSize(3) массив максимумов на канал, числовой скаляр или [].

  • Для 3-D входы последовательности изображений, Max должен быть числовым массивом того же размера, что и InputSize, 1 на 1 на 1 InputSize(4) массив максимумов на канал, числовой скаляр или [].

Если вы задаете Max свойство, затем Normalization должен быть 'rescale-symmetric' или 'rescale-zero-one'. Если Max является []затем программное обеспечение вычисляет максимумы во время обучения.

Можно задать это свойство при создании сетей без обучения (для примера, при сборке сетей с помощью assembleNetwork).

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

Слой

Имя слоя, заданное как вектор символов или строковый скаляр. Чтобы включить слой в график слоев, необходимо задать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с слоем и Name установлено в ''затем программа автоматически присваивает слою имя во время обучения.

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

Количество входов слоя. Слой не имеет входов.

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

Входные имена слоя. Слой не имеет входов.

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

Количество выходов слоя. Этот слой имеет только один выход.

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

Выходные имена слоя. Этот слой имеет только один выход.

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

Примеры

свернуть все

Создайте входной слой последовательности с именем 'seq1' и вход 12.

layer = sequenceInputLayer(12,'Name','seq1')
layer = 
  SequenceInputLayer with properties:

                      Name: 'seq1'
                 InputSize: 12

   Hyperparameters
             Normalization: 'none'
    NormalizationDimension: 'auto'

Включите входной слой последовательности в Layer массив.

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   LSTM                    LSTM with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

Создайте вход ввода последовательности для последовательностей 224-224 изображений RGB с именем 'seq1'.

layer = sequenceInputLayer([224 224 3], 'Name', 'seq1')
layer = 
  SequenceInputLayer with properties:

                      Name: 'seq1'
                 InputSize: [224 224 3]

   Hyperparameters
             Normalization: 'none'
    NormalizationDimension: 'auto'

Обучите сеть LSTM глубокого обучения для классификации «последовательность-метка».

Загрузите набор данных японских гласных, как описано в [1] и [2]. XTrain - массив ячеек, содержащий 270 последовательностей различной длины с 12 функциями, соответствующими коэффициентам cepstrum LPC. Y является категориальным вектором меток 1,2,..., 9. Записи в XTrain являются матрицами с 12 строками (по одной строке для каждой функции) и меняющимся количеством столбцов (по одному столбцу для каждого временного шага).

[XTrain,YTrain] = japaneseVowelsTrainData;

Визуализируйте первые временные ряды на графике. Каждая линия соответствует функции.

figure
plot(XTrain{1}')
title("Training Observation 1")
numFeatures = size(XTrain{1},1);
legend("Feature " + string(1:numFeatures),'Location','northeastoutside')

Определите сетевую архитектуру LSTM. Задайте размер входа как 12 (количество функций входных данных). Задайте слой LSTM, который будет иметь 100 скрытые модули измерения и выводить последний элемент последовательности. Наконец, задайте девять классов, включив полностью соединенный слой размера 9, затем слой softmax и слой классификации.

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5×1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   LSTM                    LSTM with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

Задайте опции обучения. Задайте решатель следующим 'adam' и 'GradientThreshold' как 1. Установите размер мини-пакета равным 27 и установите максимальное количество эпох равным 70.

Поскольку мини-пакеты являются маленькими с короткими последовательностями, центральный процессор лучше подходит для обучения. Задайте 'ExecutionEnvironment' на 'cpu'. Для обучения на графическом процессоре, при наличии, установите 'ExecutionEnvironment' на 'auto' (значение по умолчанию).

maxEpochs = 70;
miniBatchSize = 27;

options = trainingOptions('adam', ...
    'ExecutionEnvironment','cpu', ...
    'MaxEpochs',maxEpochs, ...
    'MiniBatchSize',miniBatchSize, ...
    'GradientThreshold',1, ...
    'Verbose',false, ...
    'Plots','training-progress');

Обучите сеть LSTM с заданными опциями обучения.

net = trainNetwork(XTrain,YTrain,layers,options);

Загрузите тестовый набор и классифицируйте последовательности в динамики.

[XTest,YTest] = japaneseVowelsTestData;

Классификация тестовых данных. Укажите тот же размер мини-пакета, что и для обучения.

YPred = classify(net,XTest,'MiniBatchSize',miniBatchSize);

Вычислите классификационную точность предсказаний.

acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9514

Чтобы создать сеть LSTM для классификации «последовательность-метка», создайте массив слоев, содержащий входной слой последовательности, слой LSTM, полносвязный слой, слой softmax и выходной слой классификации.

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

Для слоя LSTM задайте количество скрытых модулей измерения и режим выхода 'last'.

numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

Для примера, показывающего, как обучить сеть LSTM для классификации «последовательность-метка» и классификации новых данных, смотрите Классификацию последовательностей с использованием глубокого обучения.

Чтобы создать сеть LSTM для классификации «последовательность-последовательность», используйте ту же архитектуру, что и для классификации «последовательность-метка», но установите выход режим слоя LSTM на 'sequence'.

numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','sequence')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

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

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

Для слоя LSTM задайте количество скрытых модулей измерения и режим выхода 'last'.

numFeatures = 12;
numHiddenUnits = 125;
numResponses = 1;

layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numResponses)
    regressionLayer];

Чтобы создать сеть LSTM для регрессии между последовательностями, используйте ту же архитектуру, что и для регрессии между последовательностями, но установите выход режим слоя LSTM на 'sequence'.

numFeatures = 12;
numHiddenUnits = 125;
numResponses = 1;

layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','sequence')
    fullyConnectedLayer(numResponses)
    regressionLayer];

Для примера, показывающего, как обучить сеть LSTM для регрессии между последовательностями и предсказать на новых данных, смотрите Регрессию между последовательностями с использованием глубокого обучения.

Можно сделать сети LSTM глубже, вставив дополнительные слои LSTM с выходом режимом 'sequence' перед слоем LSTM. Чтобы предотвратить сверхподбор кривой, можно вставить слои выпадающего списка после слоев LSTM.

Для сетей классификации «последовательность-метка» должен быть 'last' режим выхода последнего слоя LSTM.

numFeatures = 12;
numHiddenUnits1 = 125;
numHiddenUnits2 = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits1,'OutputMode','sequence')
    dropoutLayer(0.2)
    lstmLayer(numHiddenUnits2,'OutputMode','last')
    dropoutLayer(0.2)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

Для сетей классификации «последовательность-последовательность» должен быть 'sequence' выход последнего слоя LSTM.

numFeatures = 12;
numHiddenUnits1 = 125;
numHiddenUnits2 = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits1,'OutputMode','sequence')
    dropoutLayer(0.2)
    lstmLayer(numHiddenUnits2,'OutputMode','sequence')
    dropoutLayer(0.2)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

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

  • Чтобы ввести последовательности изображений в сеть, используйте входной слой последовательности.

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

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

  • Чтобы преобразовать изображения в векторы объектов, используйте плоский слой.

Затем можно ввести векторные последовательности в слои LSTM и BiLSTM.

Определение сетевой архитектуры

Создайте классификационную сеть LSTM, которая классифицирует последовательности изображений в полутоне 28 на 28 в 10 классах.

Задайте следующую сетевую архитектуру:

  • Входной слой последовательности с входом сигнала [28 28 1].

  • Свертки, нормализацию партии . и ReLU слоя блокировать с 20 фильтрами 5 на 5.

  • LSTM слоя с 200 скрытыми модулями, который выводит только последний временной шаг.

  • A полносвязного слоя размера 10 (количество классов), за которым следует слой softmax и слой классификации.

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

inputSize = [28 28 1];
filterSize = 5;
numFilters = 20;
numHiddenUnits = 200;
numClasses = 10;

layers = [ ...
    sequenceInputLayer(inputSize,'Name','input')
    
    sequenceFoldingLayer('Name','fold')
    
    convolution2dLayer(filterSize,numFilters,'Name','conv')
    batchNormalizationLayer('Name','bn')
    reluLayer('Name','relu')
    
    sequenceUnfoldingLayer('Name','unfold')
    flattenLayer('Name','flatten')
    
    lstmLayer(numHiddenUnits,'OutputMode','last','Name','lstm')
    
    fullyConnectedLayer(numClasses, 'Name','fc')
    softmaxLayer('Name','softmax')
    classificationLayer('Name','classification')];

Преобразуйте слои в график слоев и соедините miniBatchSize выход слоя складывания последовательности на соответствующий вход слоя развертывания последовательности.

lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');

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

figure
plot(lgraph)

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

Вопросы совместимости

расширить все

Изменение поведения в будущем релизе

Поведение изменено в R2020a

Ссылки

[1] М. Кудо, Дж. Тояма и М. Симбо. «Многомерная классификация кривых с использованием областей». Распознавание Букв. Том 20, № 11-13, стр. 1103-1111.

[2] UCI Machine Learning Repository: Японский набор данных гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

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

..
Введенный в R2017b