Последовательность ввела слой
Последовательность ввела входные данные о последовательности слоя к сети.
создает входной слой последовательности и устанавливает 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 C массивом средних значений на канал или числовой скаляр, где C является количеством каналов входа. Для 2D последовательностей изображений количеством каналов является InputSize(3)
.
Для 3-D входа последовательности изображений, Mean
должен быть числовой массив одного размера с InputSize
, 1 1 1 C массивом средних значений на канал или числовой скаляр, где C является количеством каналов входа. Для 3-D последовательностей изображений количеством каналов является 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 C массивом стандартных отклонений на канал или числовой скаляр, где C является количеством каналов входа. Для 2D последовательностей изображений количеством каналов является InputSize(3)
.
Для 3-D входа последовательности изображений, StandardDeviation
должен быть числовой массив одного размера с InputSize
, 1 1 1 C массивом стандартных отклонений на канал или числовой скаляр, где C является количеством каналов входа. Для 3-D последовательностей изображений количеством каналов является 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 C массивом минимумов на канал или числовой скаляр, где C является количеством каналов входа. Для 2D последовательностей изображений количеством каналов является InputSize(3)
.
Для 3-D входа последовательности изображений, Min
должен быть числовой массив одного размера с InputSize
, 1 1 1 C массивом минимумов на канал или числовой скаляр, где C является количеством каналов входа. Для 3-D последовательностей изображений количеством каналов является 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 C массивом максимумов на канал или числовой скаляр, где C является количеством каналов входа. Для 2D последовательностей изображений количеством каналов является InputSize(3)
.
Для 3-D входа последовательности изображений, Max
должен быть числовой массив одного размера с InputSize
, 1 1 1 C массивом максимумов на канал или числовой скаляр, где C является количеством каналов входа. Для 3-D последовательностей изображений количеством каналов является 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'
Включайте слой LSTM в 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. 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 = 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 и определите максимальный номер эпох к 100.
Поскольку мини-пакеты малы с короткими последовательностями, центральный процессор лучше подходит для обучения. Установите 'ExecutionEnvironment'
к 'cpu'
. Чтобы обучаться на графическом процессоре, при наличии, устанавливает 'ExecutionEnvironment'
к 'auto'
(значение по умолчанию).
maxEpochs = 100; 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.9486
Чтобы создать сеть 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
Deep Network Designer | bilstmLayer
| classifyAndUpdateState
| flattenLayer
| gruLayer
| lstmLayer
| predictAndUpdateState
| resetState
| sequenceFoldingLayer
| sequenceUnfoldingLayer
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.