LSTM
-
class torch.nn.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 получает выходы первой и вычисляет окончательные результаты. По умолчанию: 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) входные данные имеют dtype
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.LSTM.html