exponenta event banner

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 + e − x) − 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около-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, размер nonsingleton должен быть помечен '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 на lstmLayer справочная страница.

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

Представлен в R2019b