Последовательность ввела слой
Последовательность ввела входные данные о последовательности слоя к сети.
создает входной слой последовательности и устанавливает layer
= sequenceInputLayer(inputSize
)InputSize
свойство.
InputSize
— Размер входаРазмер входа, заданного как положительное целое число или вектор положительных целых чисел.
Для векторного входа последовательности, InputSize
скаляр, соответствующий количеству функций.
Для 2D входа последовательности изображений, InputSize
вектор трех элементов [h w c]
, где h
высота изображения, w
ширина изображения и c
количество каналов изображения.
Для 3-D входа последовательности изображений, InputSize
вектор четырех элементов [h w d c]
, где h
высота изображения, w
ширина изображения, d
глубина изображений и c
количество каналов изображения.
Пример: 100
Normalization
— Нормализация данных'zerocenter'
(значение по умолчанию) | 'zscore'
| 'rescale-symmetric'
| 'rescale-zero-one'
| 'none'
| указатель на функциюНормализация данных, чтобы применить каждый раз данные вперед распространена через входной слой, заданный как одно из следующего:
'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)
Изменение поведения в будущем релизе
Начиная в R2019b, sequenceInputLayer
, по умолчанию используйте мудрую каналом нормализацию в нулевой центральной нормализации. В предыдущих версиях этот слой использует поэлементную нормализацию. Чтобы воспроизвести это поведение, установите NormalizationDimension
опция этого слоя к 'element'
.
[1] М. Кудо, J. Тояма, и М. Шимбо. "Многомерная Классификация Кривых Используя Прохождение через области". Буквы Распознавания образов. Издание 20, № 11-13, страницы 1103-1111.
[2] Репозиторий Машинного обучения UCI: японский Набор данных Гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
bilstmLayer
| classifyAndUpdateState
| flattenLayer
| lstmLayer
| predictAndUpdateState
| resetState
| sequenceFoldingLayer
| sequenceUnfoldingLayer
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.