GRU
-
class torch.nn.GRU(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0.0, bidirectional=False, device=None, dtype=None)[исходный код] -
Применяет многослойную рекуррентную нейронную сеть (RNN) с управляемыми рекуррентными блоками (GRU) к входной последовательности. Для каждого элемента входной последовательности каждый слой вычисляет следующую функцию:
где — скрытое состояние в момент времени
t, — вход в момент времениt, — скрытое состояние слоя в момент времениt-1или начальное скрытое состояние в момент времени0, а , , — соответственно, сбрасывающий, обновляющий и новый вентили. — сигмоидальная функция, а — произведение Адамара.В многослойной GRU вход -го слоя () — это скрытое состояние предыдущего слоя, умноженное на dropout-маску , где каждая — случайная величина Бернулли, принимающая значение с вероятностью
dropout.- Параметры:
-
-
input_size – Количество ожидаемых признаков во входе
x -
hidden_size – Количество признаков в скрытом состоянии
h -
num_layers – Количество рекуррентных слоёв. Например, значение
num_layers=2означает, что две GRU будут расположены последовательно, образуяstacked GRU, где вторая GRU получает выходы первой GRU и вычисляет окончательные результаты. Значение по умолчанию: 1 -
bias – Если
False, слой не использует веса смещенияb_ihиb_hh. Значение по умолчанию:True -
batch_first – Если
True, входные и выходные тензоры передаются в формате(batch, seq, feature)вместо(seq, batch, feature). Обратите внимание, что это не относится к скрытым состояниям или состояниям ячеек. Подробности см. в разделах «Входы/выходы» ниже. Значение по умолчанию:False -
dropout – Если значение ненулевое, добавляет слой
Dropoutк выходам каждого слоя GRU, кроме последнего, с вероятностью dropout, равнойdropout. Значение по умолчанию: 0 -
bidirectional – Если
True, становится двунаправленной GRU. Значение по умолчанию:False
-
input_size – Количество ожидаемых признаков во входе
- Входы: input, h_0
-
-
input: тензор формы для входа без пакетной размерности, при
batch_first=Falseили приbatch_first=True, содержащий признаки входной последовательности. Вход также может быть упакованной последовательностью переменной длины. Подробнее см.torch.nn.utils.rnn.pack_padded_sequence()илиtorch.nn.utils.rnn.pack_sequence(). - h_0: тензор формы или , содержащий начальное скрытое состояние входной последовательности. Если значение не указано, по умолчанию используется нулевой тензор.
где:
-
input: тензор формы для входа без пакетной размерности, при
- Выходы: output, h_n
-
-
output: тензор формы для входа без пакетной размерности, при
batch_first=Falseили приbatch_first=True, содержащий выходные признаки(h_t)последнего слоя GRU для каждогоt. Если в качестве входа переданtorch.nn.utils.rnn.PackedSequence, выход также будет упакованной последовательностью. - h_n: тензор формы или , содержащий конечное скрытое состояние входной последовательности.
-
output: тензор формы для входа без пакетной размерности, при
- Переменные:
-
-
weight_ih_l[k] – обучаемые веса вход—скрытое состояние -го слоя (W_ir|W_iz|W_in), формы
(3*hidden_size, input_size)дляk = 0. В противном случае форма равна(3*hidden_size, num_directions * hidden_size) -
weight_hh_l[k] – обучаемые веса скрытое состояние—скрытое состояние -го слоя (W_hr|W_hz|W_hn), формы
(3*hidden_size, hidden_size) -
bias_ih_l[k] – обучаемое смещение вход—скрытое состояние -го слоя (b_ir|b_iz|b_in), формы
(3*hidden_size) -
bias_hh_l[k] – обучаемое смещение скрытое состояние—скрытое состояние -го слоя (b_hr|b_hz|b_hn), формы
(3*hidden_size)
-
weight_ih_l[k] – обучаемые веса вход—скрытое состояние -го слоя (W_ir|W_iz|W_in), формы
Примечание
Все веса и смещения инициализируются из распределения , где
Примечание
Для двунаправленных GRU направлениям прямого и обратного прохода соответствуют индексы 0 и 1. Пример разделения выходных слоёв при
batch_first=False:output.view(seq_len, batch, num_directions, hidden_size).Примечание
Аргумент
batch_firstигнорируется для входов без пакетной размерности.Примечание
Вычисление нового вентиля несколько отличается от описанного в исходной статье и других фреймворках. В исходной реализации произведение Адамара между и предыдущим скрытым состоянием вычисляется до умножения на матрицу весов
Wи сложения со смещением:В реализации PyTorch это выполняется после умножения
Такое отличие реализации сделано намеренно для повышения эффективности.
Примечание
Если выполняются следующие условия: 1) включён cudnn, 2) входные данные находятся на GPU, 3) тип данных входа —
torch.float16, 4) используется GPU V100, 5) входные данные не представлены в форматеPackedSequence, можно выбрать постоянный алгоритм для повышения производительности.Примеры:
>>> rnn = nn.GRU(10, 20, 2) >>> input = torch.randn(5, 3, 10) >>> h0 = torch.randn(2, 3, 20) >>> output, hn = rnn(input, h0)
© 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.GRU.html