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