lstm

Долгая краткосрочная память

Описание

Операция долгой краткосрочной памяти (LSTM) позволяет сети изучать долгосрочные зависимости между временными шагами в данных о последовательности и временных рядах.

Примечание

Эта функция применяет операцию LSTM глубокого обучения к dlarray данные. Если вы хотите применить операцию LSTM в layerGraph объект или Layer массив, используйте следующий слой:

пример

dlY = lstm(dlX,H0,C0,weights,recurrentWeights,bias) применяет вычисление долгой краткосрочной памяти (LSTM) к входу dlX использование начальной буквы скрытый H0 состояния, состояние первичной клетки C0, и параметры weights, recurrentWeights, и bias. Вход dlX отформатированный dlarray с метками размерности. Выход dlY отформатированный dlarray с той же размерностью помечает как dlX, за исключением любого 'S' размерности.

lstm функционируйте обновляет ячейку и скрытые состояния с помощью гиперболической функции тангенса (tanh) как функция активации состояния. lstm функционируйте использует сигмоидальную функцию, данную σ(x)=(1+ex)1 как функция активации логического элемента.

[dlY,hiddenState,cellState] = lstm(dlX,H0,C0,weights,recurrentWeights,bias) также возвращает скрытое состояние и состояние ячейки после операции LSTM.

[___] = lstm(___,'DataFormat',FMT) также указывает, что размерность маркирует FMT когда dlX не отформатированный dlarray. Выход dlY бесформатный dlarray с той же размерностью заказывают как dlX, за исключением любого 'S' размерности.

Примеры

свернуть все

Выполните операцию LSTM с помощью трех скрытых модулей.

Создайте входные данные о последовательности как 32 наблюдения с десятью каналами и длиной последовательности 64.

numFeatures = 10;
numObservations = 32;
sequenceLength = 64;

X = randn(numFeatures,numObservations,sequenceLength);
dlX = dlarray(X,'CBT');

Создайте скрытую начальную букву и состояния ячейки с тремя скрытыми модулями. Используйте ту же начальную букву скрытое состояние и состояние ячейки для всех наблюдений.

numHiddenUnits = 3;
H0 = zeros(numHiddenUnits,1);
C0 = zeros(numHiddenUnits,1);

Создайте learnable параметры для операции LSTM.

weights = dlarray(randn(4*numHiddenUnits,numFeatures),'CU');
recurrentWeights = dlarray(randn(4*numHiddenUnits,numHiddenUnits),'CU');
bias = dlarray(randn(4*numHiddenUnits,1),'C');

Выполните вычисление LSTM.

[dlY,hiddenState,cellState] = lstm(dlX,H0,C0,weights,recurrentWeights,bias);

Просмотрите размер и размерности dlY.

size(dlY)
dlY.dims
ans = 1×3    
     3    32    64

ans = 'CBT'

Просмотрите размер hiddenState и cellState.

size(hiddenState)
size(cellState)
ans = 1×2    
     3    32

ans = 1×2    
     3    32

Проверяйте что выход hiddenState равно последнему временному шагу выхода dlY.

if extractdata(dlY(:,:,end)) == hiddenState
   disp("The hidden state and the last time step are equal.")
else 
   disp("The hidden state and the last time step are not equal.")
end
The hidden state and the last time step are equal.

Можно использовать скрытое состояние и состояние ячейки, чтобы отслеживать состояние операции LSTM и ввести далее последовательные данные.

Входные параметры

свернуть все

Входные данные, заданные как dlarray с или без меток размерности или числового массива. Когда dlX не отформатированный dlarray, необходимо задать формат этикетки размерности с помощью 'DataFormat',FMT. Если dlX числовой массив, по крайней мере один из H0, C0, weights, recurrentWeights, или bias должен быть dlarray.

dlX должен содержать размерность последовательности, пометил 'T'. Если dlX имеет любые пространственные размерности, пометил 'S', они сглажены в 'C' размерности канала. Если dlX имеет любые незаданные размерности, пометил 'U', они должны быть одиночным элементом.

Типы данных: single | double

Начальная буква скрытый вектор состояния, заданный как dlarray с или без меток размерности или числового массива.

Если H0 отформатированный dlarray, это должно содержать размерность канала, пометил 'C' и опционально пакетная размерность пометила 'B' с тем же размером как 'B' размерность dlX. Если H0 не имеет 'B' размерность, функция использует тот же скрытый вектор состояния в каждом наблюдении в dlX.

Размер 'C' размерность определяет количество скрытых модулей. Размер 'C' размерность H0 должно быть равно размеру 'C' размерности C0.

Если H0 не отформатированный dlarray, размер первой размерности определяет количество скрытых модулей и должен быть одного размера с первой размерностью или 'C' размерность C0.

Типы данных: single | double

Вектор состояния первичной клетки, заданный как dlarray с или без меток размерности или числового массива.

Если C0 отформатированный dlarray, это должно содержать размерность канала, пометил 'C' и опционально пакетная размерность пометила 'B' с тем же размером как 'B' размерность dlX. Если C0 не имеет 'B' размерность, функция использует тот же вектор состояния ячейки в каждом наблюдении в dlX.

Размер 'C' размерность определяет количество скрытых модулей. Размер 'C' размерность C0 должно быть равно размеру 'C' размерности H0.

Если C0 не отформатированный dlarray, размер первой размерности определяет количество скрытых модулей и должен быть одного размера с первой размерностью или 'C' размерность H0.

Типы данных: single | double

Веса, заданные как dlarray с или без меток размерности или числового массива.

Задайте weights как матрица размера 4*NumHiddenUnits- InputSize, где NumHiddenUnits размер 'C' размерность обоих C0 и H0, и InputSize размер 'C' размерность dlX умноженный на размер каждого 'S' размерность dlX, где существующий.

Если weights отформатированный dlarray, это должно содержать 'C' размерность размера 4*NumHiddenUnits и 'U' размерность размера InputSize.

Типы данных: single | double

Текущие веса, заданные как dlarray с или без меток размерности или числового массива.

Задайте recurrentWeights как матрица размера 4*NumHiddenUnits- NumHiddenUnits, где NumHiddenUnits размер 'C' размерность обоих C0 и H0.

Если recurrentWeights отформатированный dlarray, это должно содержать 'C' размерность размера 4*NumHiddenUnits и 'U' размерность размера NumHiddenUnits.

Типы данных: single | double

Сместите, заданный как dlarray вектор с или без меток размерности или числового вектора.

Задайте bias как вектор длины 4*NumHiddenUnits, где NumHiddenUnits размер 'C' размерность обоих C0 и H0.

Если bias отформатированный dlarray, неодноэлементная размерность должна быть помечена 'C'.

Типы данных: single | double

Порядок размерности бесформатных входных данных, заданных как разделенная запятой пара, состоящая из 'DataFormat' и символьный массив или строка, которая обеспечивает метку для каждой размерности данных. Каждый символ в FMT должно быть одно из следующего:

  • 'S' — Пространственный

  • 'C' — Канал

  • 'B' — Пакет (например, выборки и наблюдения)

  • 'T' — Время (например, последовательности)

  • 'U' — Незаданный

Можно указать, что несколько размерностей пометили 'S' или 'U'. Можно использовать, маркирует 'C'B, или 'T' самое большее однажды.

Необходимо задать 'DataFormat' когда входные данные dlX бесформатный dlarray.

Пример: 'DataFormat','SSCB'

Типы данных: char | string

Выходные аргументы

свернуть все

LSTM выходной параметр, возвращенный как dlarray. Выход dlY имеет тот же базовый тип данных как вход dlX.

Если входные данные dlX отформатированный dlarray, dlY имеет те же метки размерности как dlX, за исключением любого 'S' размерности. Если входными данными не является отформатированный dlarray, dlY бесформатный dlarray с той же размерностью заказывают как входные данные.

Размер 'C' размерность dlY совпадает с количеством скрытых модулей, заданных размером 'C' размерность H0 или C0.

Скрытый вектор состояния для каждого наблюдения, возвращенного как dlarray или числовой массив. hiddenState возвращен с совпадающим типом данных как H0.

Если вход H0 отформатированный dlarray, выход hiddenState возвращен как отформатированный dlarray с форматом 'CB'.

Вектор состояния ячейки для каждого наблюдения, возвращенного как dlarray или числовой массив. cellState возвращен с совпадающим типом данных как C0.

Если вход C0 отформатированный dlarray, выход cellState возвращен как отформатированный dlarray с форматом 'CB'.

Больше о

свернуть все

Долгая краткосрочная память

Операция LSTM позволяет сети изучать долгосрочные зависимости между временными шагами в данных о последовательности и временных рядах. Для получения дополнительной информации см. определение Слоя Long Short-Tem Memory на lstmLayer страница с описанием.

Расширенные возможности

Введенный в R2019b