GRU
-
class torch.ao.nn.quantized.dynamic.GRU(*args, **kwargs)[источник] -
Применяет многослойную рекуррентную нейронную сеть (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). По умолчанию:False -
dropout – Если значение отлично от нуля, к выходам каждого слоя GRU, кроме последнего, добавляется слой
Dropoutс вероятностью dropout, равнойdropout. По умолчанию: 0 -
bidirectional – Если
True, слой становится двунаправленной GRU. По умолчанию:False
-
input_size – Количество ожидаемых признаков во входных данных
- Входы: input, h_0
-
-
input формы
(seq_len, batch, input_size): тензор, содержащий признаки входной последовательности. Вход также может быть упакованной последовательностью переменной длины. Подробнее см. в описанииtorch.nn.utils.rnn.pack_padded_sequence(). -
h_0 формы
(num_layers * num_directions, batch, hidden_size): тензор, содержащий начальное скрытое состояние для каждого элемента пакета. Если значение не задано, по умолчанию используется ноль. Если RNN двунаправленная, num_directions должно быть равно 2, в противном случае — 1.
-
input формы
- Выходы: output, h_n
-
-
output формы
(seq_len, batch, num_directions * hidden_size): тензор, содержащий выходные признаки h_t последнего слоя GRU для каждогоt. Если в качестве входа была переданаtorch.nn.utils.rnn.PackedSequence, выход также будет упакованной последовательностью. В распакованном случае направления можно разделить с помощьюoutput.view(seq_len, batch, num_directions, hidden_size); прямое и обратное направления имеют номера0и1соответственно.Аналогичным образом направления можно разделить и в упакованном случае.
-
h_n формы
(num_layers * num_directions, batch, hidden_size): тензор, содержащий скрытое состояние дляt = seq_lenКак и в случае с output, слои можно разделить с помощью
h_n.view(num_layers, num_directions, batch, hidden_size).
-
- Форма:
-
- Вход 1: тензор, содержащий входные признаки, где , а
Lобозначает длину последовательности. - Вход 2: тензор, содержащий начальное скрытое состояние для каждого элемента пакета. . Если значение не задано, по умолчанию используется ноль. где . Если RNN двунаправленная, num_directions должно быть равно 2, в противном случае — 1.
- Выход 1: , где
- Выход 2: тензор, содержащий следующее скрытое состояние для каждого элемента пакета
- Вход 1: тензор, содержащий входные признаки, где , а
- Переменные:
-
-
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), формы
Примечание
Все веса и смещения инициализируются значениями из , где
Примечание
Вычисление нового управляющего блока несколько отличается от исходной статьи и других фреймворков. В исходной реализации произведение Адамара между и предыдущим скрытым состоянием вычисляется до умножения на матрицу весов
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.ao.nn.quantized.dynamic.GRU.html