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' размерности.

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

dlX должен содержать размерность последовательности, помеченный 'T'. Если dlX имеет любые пространственные размерности, помеченные 'S', они сплющены в 'C' размерность канала. Если dlX не имеет размерности канала, затем добавляется один. Если 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-by- InputSize, где NumHiddenUnits - размер 'C' размерность обоих C0 и H0, и InputSize - размер 'C' размерность dlX умноженный на размер каждого 'S' размерность dlX, где присутствует.

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

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

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

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

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

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

Смещение, заданное как 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 когда входные данные dlX не является форматированным 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 Layer на lstmLayer страница с описанием.

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

Введенный в R2019b