LSTM
-
class torch.nn.modules.rnn.LSTM(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0.0, bidirectional=False, proj_size=0, device=None, dtype=None)[исходный код] -
Применяет многослойную рекуррентную нейронную сеть с долгой краткосрочной памятью (LSTM) к входной последовательности. Для каждого элемента входной последовательности каждый слой вычисляет следующую функцию:
где — скрытое состояние в момент времени
t, — состояние ячейки в момент времениt, — вход в момент времениt, — скрытое состояние слоя в момент времениt-1или начальное скрытое состояние в момент времени0, а , , , — соответственно входной, забывающий, ячеечный и выходной вентили. — сигмоидальная функция, а — произведение Адамара.В многослойной LSTM вход -го слоя () — это скрытое состояние предыдущего слоя, умноженное на dropout-маску , где каждая является случайной величиной Бернулли, равной с вероятностью
dropout.Если задан
proj_size > 0, будет использоваться LSTM с проекциями. Это изменяет ячейку LSTM следующим образом. Во-первых, размерность изменится сhidden_sizeнаproj_size(размерности изменятся соответственно). Во-вторых, выходное скрытое состояние каждого слоя будет умножено на обучаемую матрицу проекции: . Обратите внимание, что в результате этого выход сети LSTM также будет иметь другую форму. Точные размерности всех переменных приведены ниже в разделах «Входы/выходы». Подробнее см. в статье https://arxiv.org/abs/1402.1128.- Параметры:
-
-
input_size – Количество ожидаемых признаков во входе
x -
hidden_size – Количество признаков в скрытом состоянии
h -
num_layers – Количество рекуррентных слоёв. Например, значение
num_layers=2означает, что две LSTM будут объединены в стек, образуяstacked LSTM, где вторая LSTM получает выходы первой LSTM и вычисляет итоговые результаты. По умолчанию: 1 -
bias – Если
False, слой не использует веса смещенияb_ihиb_hh. По умолчанию:True -
batch_first – Если
True, входные и выходные тензоры передаются в формате(batch, seq, feature)вместо(seq, batch, feature). Обратите внимание, что это не относится к скрытым состояниям и состояниям ячейки. Подробности см. ниже в разделах «Входы/выходы». По умолчанию:False -
dropout – Если значение ненулевое, добавляет слой
Dropoutк выходам каждого слоя LSTM, кроме последнего, с вероятностью dropout, равнойdropout. По умолчанию: 0 -
bidirectional – Если
True, используется двунаправленная LSTM. По умолчанию:False -
proj_size – Если
> 0, используется LSTM с проекциями указанного размера. По умолчанию: 0
-
input_size – Количество ожидаемых признаков во входе
- Входы: input, (h_0, c_0)
-
-
input: тензор формы для входа без пакетов, при
batch_first=Falseили приbatch_first=True; содержит признаки входной последовательности. Входом также может быть упакованная последовательность переменной длины. Подробности см. вtorch.nn.utils.rnn.pack_padded_sequence()илиtorch.nn.utils.rnn.pack_sequence(). - h_0: тензор формы для входа без пакетов или ; содержит начальное скрытое состояние для каждого элемента входной последовательности. Если (h_0, c_0) не переданы, по умолчанию используются нули.
- c_0: тензор формы для входа без пакетов или ; содержит начальное состояние ячейки для каждого элемента входной последовательности. Если (h_0, c_0) не переданы, по умолчанию используются нули.
где:
-
input: тензор формы для входа без пакетов, при
- Выходы: output, (h_n, c_n)
-
-
output: тензор формы для входа без пакетов, при
batch_first=Falseили приbatch_first=True; содержит выходные признаки(h_t)последнего слоя LSTM для каждогоt. Если на вход поданаtorch.nn.utils.rnn.PackedSequence, выход также будет упакованной последовательностью. Приbidirectional=True,outputбудет содержать конкатенацию прямого и обратного скрытых состояний на каждом временном шаге последовательности. -
h_n: тензор формы для входа без пакетов или ; содержит последнее скрытое состояние для каждого элемента последовательности. При
bidirectional=True,h_nбудет содержать конкатенацию соответственно последних прямого и обратного скрытых состояний. -
c_n: тензор формы для входа без пакетов или ; содержит последнее состояние ячейки для каждого элемента последовательности. При
bidirectional=True,c_nбудет содержать конкатенацию соответственно последних прямого и обратного состояний ячейки.
-
output: тензор формы для входа без пакетов, при
- Переменные:
-
-
weight_ih_l[k] – обучаемые веса связи входа со скрытым состоянием для слоя
(W_ii|W_if|W_ig|W_io), формы(4*hidden_size, input_size)дляk = 0. В противном случае форма равна(4*hidden_size, num_directions * hidden_size). Если заданproj_size > 0, форма будет(4*hidden_size, num_directions * proj_size)дляk > 0 -
weight_hh_l[k] – обучаемые веса связи скрытого состояния со скрытым состоянием для слоя
(W_hi|W_hf|W_hg|W_ho), формы(4*hidden_size, hidden_size). Если заданproj_size > 0, форма будет(4*hidden_size, proj_size). -
bias_ih_l[k] – обучаемое смещение связи входа со скрытым состоянием для слоя
(b_ii|b_if|b_ig|b_io), формы(4*hidden_size) -
bias_hh_l[k] – обучаемое смещение связи скрытого состояния со скрытым состоянием для слоя
(b_hi|b_hf|b_hg|b_ho), формы(4*hidden_size) -
weight_hr_l[k] – обучаемые веса проекции для слоя формы
(proj_size, hidden_size). Присутствуют только в том случае, если заданproj_size > 0. -
weight_ih_l[k]_reverse – аналогично
weight_ih_l[k]для обратного направления. Присутствует только приbidirectional=True. -
weight_hh_l[k]_reverse – аналогично
weight_hh_l[k]для обратного направления. Присутствует только приbidirectional=True. -
bias_ih_l[k]_reverse – аналогично
bias_ih_l[k]для обратного направления. Присутствует только приbidirectional=True. -
bias_hh_l[k]_reverse – аналогично
bias_hh_l[k]для обратного направления. Присутствует только приbidirectional=True. -
weight_hr_l[k]_reverse – аналогично
weight_hr_l[k]для обратного направления. Присутствует только приbidirectional=Trueи заданномproj_size > 0.
-
weight_ih_l[k] – обучаемые веса связи входа со скрытым состоянием для слоя
Примечание
Все веса и смещения инициализируются из распределения , где
Примечание
Для двунаправленных LSTM прямое и обратное направления обозначаются соответственно числами 0 и 1. Пример разделения выходных слоёв при
batch_first=False:output.view(seq_len, batch, num_directions, hidden_size).Примечание
Для двунаправленных LSTM
h_nне эквивалентен последнему элементуoutput; первый содержит последние прямое и обратное скрытые состояния, а последний — последнее прямое и начальное обратное скрытые состояния.Примечание
Аргумент
batch_firstигнорируется для входных данных без пакетов.Примечание
Значение
proj_sizeдолжно быть меньшеhidden_size.Предупреждение
Для функций RNN в некоторых версиях cuDNN и CUDA известны проблемы с недетерминированностью. Чтобы обеспечить детерминированное поведение, задайте следующие переменные среды:
Задайте переменную среды (обратите внимание на начальный символ двоеточия)
CUBLAS_WORKSPACE_CONFIG=:16:8илиCUBLAS_WORKSPACE_CONFIG=:4096:2Дополнительную информацию см. в примечаниях к выпуску cuDNN 8.
Примечание
Если выполняются следующие условия: 1) cudnn включён, 2) входные данные находятся на GPU, 3) тип данных входа —
torch.float16, 4) используется GPU V100, 5) входные данные представлены не в форматеPackedSequence, то для повышения производительности может быть выбран постоянный алгоритм.Примеры:
>>> rnn = nn.LSTM(10, 20, 2) >>> input = torch.randn(5, 3, 10) >>> h0 = torch.randn(2, 3, 20) >>> c0 = torch.randn(2, 3, 20) >>> output, (hn, cn) = rnn(input, (h0, c0))
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.modules.rnn.LSTM.html