GRU
-
class torch.nn.GRU(self, input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0.0, bidirectional=False, device=None, dtype=None)[source] -
Применяет многослойный рекуррентный блок GRU к последовательности входных данных.
Для каждого элемента во входной последовательности каждый слой вычисляет следующую функцию:
где — скрытое состояние в момент времени
t, — входной сигнал в момент времениt, — скрытое состояние слоя в момент времениt-1или начальное скрытое состояние в момент времени0, а , , — соответственно, ворота сброса, обновления и нового состояния. — сигмоидальная функция, а — произведение Адамара.В многослойном блоке GRU вход -го слоя () представляет собой скрытое состояние предыдущего слоя, умноженного на вероятность отбрасывания , где каждое является биномиальной случайной величиной со значением с вероятностью
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. По умолчанию: 0 -
bidirectional – Если
True, становится двунаправленным блоком GRU. По умолчанию:False
-
input_size – Количество ожидаемых признаков входящего сигнала
- Входные данные: вход, h_0
-
-
вход: тензор формы для невложённого входного сигнала, при
batch_first=Falseили приbatch_first=True, содержащий признаки входной последовательности. Вход также может быть упакованной последовательностью переменной длины. См.torch.nn.utils.rnn.pack_padded_sequence()илиtorch.nn.utils.rnn.pack_sequence()для получения более подробной информации. - h_0: тензор формы или , содержащий начальное скрытое состояние для входной последовательности. По умолчанию равен нулю, если не указано.
где:
-
вход: тензор формы для невложённого входного сигнала, при
- Выходные данные: вывод, h_n
-
-
вывод: тензор формы для невложённого входного сигнала, при
batch_first=Falseили приbatch_first=Trueсодержащий выходные признаки(h_t)с последнего слоя GRU для каждогоt. Если в качестве входных данных был переданtorch.nn.utils.rnn.PackedSequence, на выходе также будет упакованная последовательность. - h_n: тензор формы или содержащий конечное скрытое состояние для входной последовательности.
-
вывод: тензор формы для невложённого входного сигнала, при
- Переменные
-
-
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)
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nn.GRU.html