Входной слой последовательности
Входной уровень последовательности вводит данные последовательности в сеть.
создает слой ввода последовательности и задает layer = sequenceInputLayer(inputSize)InputSize собственность.
устанавливает необязательный layer = sequenceInputLayer(inputSize,Name,Value)Normalization, Mean, и Name с использованием пар имя-значение. Можно указать несколько пар имя-значение. Заключите каждое имя свойства в отдельные кавычки.
InputSize - Размер входаРазмер входного значения, определяемый как положительное целое число или вектор положительных целых чисел.
Для ввода векторной последовательности InputSize - скаляр, соответствующий количеству элементов.
Для ввода 2-D последовательности изображений: InputSize - вектор из трех элементов [h w c], где h - высота изображения, w - ширина изображения, и c - количество каналов изображения.
Для ввода 3-D последовательности изображений: InputSize - вектор из четырех элементов [h w d c], где h - высота изображения, w - ширина изображения, d - глубина изображения, и c - количество каналов изображения.
Пример: 100
Normalization - Нормализация данных'none' (по умолчанию) | 'zerocenter' | 'zscore' | 'rescale-symmetric' | 'rescale-zero-one' | дескриптор функцииНормализация данных для применения при каждом прямом распространении данных через входной уровень, определяемая одним из следующих параметров:
'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.
Если входные данные содержат заполнение, то слой игнорирует значения заполнения при нормализации входных данных.
NormalizationDimension - Размерность нормализации'auto' (по умолчанию) | 'channel' | 'element' | 'all'Размер нормализации, указанный как одно из следующих значений:
'auto' - Если вариант обучения false и укажите любую из статистики нормализации (Mean, StandardDeviation, Min, или Max), затем нормализовать по измерениям, соответствующим статистике. В противном случае пересчитайте статистику во время обучения и примените нормализацию канала.
'channel' - Канальная нормализация.
'element' - Элементная нормализация.
'all' - Нормализация всех значений с помощью скалярной статистики.
Mean - Среднее значение для нормализации нулевого центра и z-показателя[] (по умолчанию) | числовой массив | числовой скалярСреднее значение для нормализации с нулевым центром и z-score, указанное как числовой массив или пустое.
Для ввода векторной последовательности Mean должно быть InputSize-на-1 вектор средства на канал, числовой скаляр или [].
Для ввода 2-D последовательности изображений: Mean должен быть числовым массивом того же размера, что и InputSize, 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
StandardDeviation - Стандартное отклонение[] (по умолчанию) | числовой массив | числовой скалярСтандартное отклонение, используемое для нормализации z-показателя, задается как числовой массив, числовой скаляр или пустое значение.
Для ввода векторной последовательности StandardDeviation должно быть InputSize-на-1 вектор стандартных отклонений на канал, числовой скаляр или [].
Для ввода 2-D последовательности изображений: StandardDeviation должен быть числовым массивом того же размера, что и InputSize, 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 - Минимальное значение для масштабирования[] (по умолчанию) | числовой массив | числовой скалярМинимальное значение для масштабирования, указанное как числовой массив или пустое.
Для ввода векторной последовательности Min должно быть InputSize-на-1 вектор средства на канал или числовой скаляр.
Для ввода 2-D последовательности изображений: Min должен быть числовым массивом того же размера, что и InputSize, 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 - Максимальное значение для масштабирования[] (по умолчанию) | числовой массив | числовой скалярМаксимальное значение для масштабирования, указанное как числовой массив или пустое.
Для ввода векторной последовательности Max должно быть InputSize-на-1 вектор средства на канал или числовой скаляр.
Для ввода 2-D последовательности изображений: Max должен быть числовым массивом того же размера, что и InputSize, 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 - Имя слоя'' (по умолчанию) | символьный вектор | строковый скаляр
Имя слоя, указанное как символьный вектор или строковый скаляр. Чтобы включить слой в график слоев, необходимо указать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с уровнем и Name имеет значение ''затем программа автоматически присваивает имя слою во время обучения.
Типы данных: char | string
NumInputs - Количество входовКоличество входов слоя. Слой не имеет входных данных.
Типы данных: double
InputNames - Входные имена{} (по умолчанию)Входные имена слоя. Слой не имеет входных данных.
Типы данных: cell
NumOutputs - Количество выходовКоличество выходов уровня. Этот уровень имеет только один выход.
Типы данных: double
OutputNames - Имена выходных данных{'out'} (по умолчанию)Выходные имена слоя. Этот уровень имеет только один выход.
Типы данных: 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'. Обучение на GPU, если доступно, установить '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.
Для сетей классификации «последовательность-метка» режим вывода последнего уровня 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.
Определение сетевой архитектуры
Создайте сеть 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)

sequenceInputLayerпо умолчанию использует нормализацию по каналам для нормализации нулевого центраИзменение поведения в будущем выпуске
Начиная с R2019b, sequenceInputLayerпо умолчанию для нормализации нулевого центра используется нормализация по каналам. В предыдущих версиях этот слой использует нормализацию по элементам. Чтобы воспроизвести это поведение, установите NormalizationDimension опции этого слоя в 'element'.
sequenceInputLayer игнорирует значения заполнения при нормализацииВ R2020a изменилось поведение
Начиная с R2020a, sequenceInputLayer объекты игнорируют значения заполнения во входных данных при нормализации. Это означает, что Normalization опции в sequenceInputLayer теперь делает обучение инвариантным для операций с данными, например, 'zerocenter' нормализация теперь подразумевает, что результаты обучения инвариантны среднему значению данных.
Если вы тренируетесь на дополненных последовательностях, то вычисленные коэффициенты нормализации могут отличаться в более ранних версиях и могут давать разные результаты.
[1] М. Кудо, Дж. Тояма и М. Симбо. «Многомерная классификация кривых с использованием сквозных областей». Буквы распознавания образов. т. 20, № 11-13, стр. 1103-1111.
[2] Хранилище машинного обучения UCI: набор данных японских гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
Для входов векторной последовательности число элементов должно быть константой во время генерации кода.
Создание кода не поддерживает 'Normalization' задается с помощью дескриптора функции.
Примечания и ограничения по использованию:
Для генерации кода CUDA ® или C++ с помощью GPU Coder™ необходимо сначала построить и обучить глубокую нейронную сеть. После обучения и оценки сети можно настроить генератор кода для генерации кода и развертывания сверточной нейронной сети на платформах, использующих процессоры NVIDIA ® или ARM ® GPU. Дополнительные сведения см. в разделе Глубокое обучение с помощью кодера графического процессора (GPU Coder).
Для этого уровня можно создать код, который использует преимущества библиотеки глубоких нейронных сетей NVIDIA CUDA (cuDNN) или библиотеки вывода NVIDIA TensorRT™ высокой производительностью.
Библиотека cuDNN поддерживает векторные и 2-D последовательности изображений. Библиотека TensorRT поддерживает только векторные входные последовательности.
Для входов векторной последовательности число элементов должно быть константой во время генерации кода.
Для входных данных последовательности изображений высота, ширина и количество каналов должны быть постоянными во время генерации кода.
Создание кода не поддерживает 'Normalization' задается с помощью дескриптора функции.
bilstmLayer | classifyAndUpdateState | Конструктор глубоких сетей | featureInputLayer | flattenLayer | gruLayer | lstmLayer | predictAndUpdateState | resetState | sequenceFoldingLayer | sequenceUnfoldingLayer
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.