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