sequenceInputLayer

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

Описание

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

Создание

Описание

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

пример

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

Свойства

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

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

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

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

  • Для 2D входа последовательности изображений, 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Стандартное отклонениеmin, или Max), затем нормируйте по размерностям, совпадающим со статистикой. В противном случае повторно вычислите статистику в учебное время и примените мудрую каналом нормализацию.

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

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

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

Среднее значение для нулевого центра и нормализации 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

Слой

Имя слоя в виде вектора символов или строкового скаляра. Чтобы включать слой в график слоев, необходимо задать непустое уникальное имя слоя. Если вы обучаете серийную сеть со слоем и 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 функциями, соответствующими коэффициентам кепстра 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 для 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)

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

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

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

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

Ссылки

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

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

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

Введенный в R2017b