sequenceInputLayer

Последовательность ввела слой

Описание

Последовательность ввела входные данные о последовательности слоя к сети.

Создание

Описание

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

пример

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

Свойства

развернуть все

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

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

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

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

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

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

Чтобы задать минимальную длину последовательности входных данных, используйте MinLength свойство.

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

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

Когда вы создаете сеть, которая прореживает данные в измерении времени, необходимо заботиться, что сеть поддерживает обучающие данные и любые данные для предсказания. Некоторые слои глубокого обучения требуют, чтобы вход имел минимальную длину последовательности. Например, 1D слой свертки требует, чтобы вход имел, по крайней мере, столько же временных шагов сколько размер фильтра.

Когда временные ряды данных о последовательности распространяют через сеть, длина последовательности может измениться. Например, субдискретизация операций, таких как 1D свертки может выходные данные с меньшим количеством временных шагов, чем его вход. Это означает, что субдискретизация операций может заставить более поздние слои в сети выдавать ошибку, потому что данные имеют более короткую длину последовательности, чем минимальная длина, требуемая слоем.

Когда вы обучаете или собираете сеть, программное обеспечение автоматически проверяет, что последовательности длины 1 могут распространить через сеть. Некоторые сети не могут поддержать последовательности длины 1, но могут успешно распространить последовательности более долгих длин. Чтобы проверять, что распространение поддержек сети вашего обучения и ожидаемых данных о предсказании, устанавливает MinLength свойство к значению, меньше чем или равному минимальной длине ваших данных и ожидаемой минимальной длине ваших данных о предсказании.

Совет

Чтобы препятствовать тому, чтобы свертка и слои объединения изменили размер данных, установите Padding опция слоя к "same" или "causal".

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

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

  • '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.

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

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

Размерность нормализации в виде одного из следующего:

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

  • 'channel' – Мудрая каналом нормализация.

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

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

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

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

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

  • Для 2D входа последовательности изображений, Mean должен быть числовой массив одного размера с InputSize, 1 1 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- 1 вектор из стандартных отклонений на канал, числовой скаляр или [].

  • Для 2D входа последовательности изображений, StandardDeviation должен быть числовой массив одного размера с InputSize, 1 1 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- 1 вектор из средних значений на канал или числовой скаляр.

  • Для 2D входа последовательности изображений, Min должен быть числовой массив одного размера с InputSize, 1 1 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- 1 вектор из средних значений на канал или числовой скаляр.

  • Для 2D входа последовательности изображений, Max должен быть числовой массив одного размера с InputSize, 1 1 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

Слой

Имя слоя в виде вектора символов или строкового скаляра. Для Layer вход массивов, trainNetwork, assembleNetwork, layerGraph, и dlnetwork функции автоматически присваивают имена к слоям с Name установите на ''.

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

Количество входных параметров слоя. Слой не имеет никаких входных параметров.

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

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

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

Это свойство доступно только для чтения.

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

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

Это свойство доступно только для чтения.

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

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

Примеры

свернуть все

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

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

                      Name: 'seq1'
                 InputSize: 12
                 MinLength: 1

   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]
                 MinLength: 1

   Hyperparameters
             Normalization: 'none'
    NormalizationDimension: 'auto'

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

Загрузите японский набор данных Гласных как описано в [1] и [2]. XTrain массив ячеек, содержащий 270 последовательностей различной длины с 12 функциями, соответствующими коэффициентам кепстра 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')

Figure contains an axes object. The axes object with title Training Observation 1 contains 12 objects of type line. These objects represent Feature 1, Feature 2, Feature 3, Feature 4, Feature 5, Feature 6, Feature 7, Feature 8, Feature 9, Feature 10, Feature 11, Feature 12.

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

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

Задайте опции обучения. Задайте решатель как '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);

Figure Training Progress (25-Aug-2021 07:29:40) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 11 objects of type patch, text, line. Axes object 2 contains 11 objects of type patch, text, line.

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

[XTest,YTest] = japaneseVowelsTestData;

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

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

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

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

Чтобы создать сеть 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 для sequence-one регрессии, создайте массив слоя, содержащий входной слой последовательности, слой LSTM, полносвязный слой и регрессию выходной слой.

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

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

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

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

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

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

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

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

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

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

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];

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

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.

Архитектура сети Define

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

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

  • Последовательность ввела слой с входным размером [28 28 1].

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

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

  • Полносвязный слой размера 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 object. The axes object contains an object of type graphplot.

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

развернуть все

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

Поведение изменяется в R2020a

Ссылки

[1] М. Кудо, J. Тояма, и М. Шимбо. "Многомерная Классификация Кривых Используя Прохождение через области". Буквы Распознавания образов. Издание 20, № 11-13, страницы 1103-1111.

[2] Репозиторий Машинного обучения UCI: японский Набор данных Гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

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

Введенный в R2017b