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 наблюдения с 10 каналами и длиной последовательности 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);

Создайте настраиваемые параметры для операции 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)
ans = 1×3

     3    32    64

dlY.dims
ans = 
'CBT'

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

size(hiddenState)
ans = 1×2

     3    32

size(cellState)
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, бесформатный dlarray, или числовой массив. Когда dlX не отформатированный dlarray, необходимо задать формат этикетки размерности с помощью 'DataFormat',FMT. Если dlX числовой массив, по крайней мере один из H0, C0, weights, recurrentWeights, или bias должен быть dlarray.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 'C' — Канал

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

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

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

Ограничения

  • functionToLayerGraph не поддерживает lstm функция. Если вы используете functionToLayerGraph с функцией, которая содержит lstm операция, получившийся LayerGraph содержит слои заполнителя.

Больше о

свернуть все

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

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

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

Введенный в R2019b