РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
353 of 769 menu

Класс GRU

Класс GRU реализует рекуррентный слой с вентилями (Gated Recurrent Unit), который является упрощенной версией LSTM и эффективно обрабатывает последовательности данных. Первым параметром передается размер входных признаков, вторым - размер скрытого состояния, третьим - количество слоев.

Синтаксис

torch.nn.GRU( input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0.0, bidirectional=False )

Параметры

Метод принимает следующие параметры:

  • input_size - размер входных признаков на каждом временном шаге.
  • hidden_size - размер скрытого состояния.
  • num_layers - количество рекуррентных слоев (по умолчанию 1).
  • bias - использовать ли смещение (по умолчанию True).
  • batch_first - если True, то вход имеет форму (batch, seq, feature) (по умолчанию False).
  • dropout - вероятность dropout между слоями (по умолчанию 0.0).
  • bidirectional - использовать ли двунаправленный GRU (по умолчанию False).

Вход и выход

На вход слой принимает тензор формы (seq_len, batch, input_size) (или (batch, seq_len, input_size), если batch_first=True). Возвращает выходные данные всех временных шагов и финальное скрытое состояние.

Пример

Давайте создадим простой GRU слой и применим его к случайной последовательности:

import torch torch.manual_seed(0) gru = torch.nn.GRU( input_size=10, hidden_size=20, num_layers=2 ) x = torch.randn(5, 3, 10) # seq_len=5, batch=3, features=10 output, hidden = gru(x) print(output.shape) print(hidden.shape)

Результат выполнения кода:

torch.Size([5, 3, 20]) torch.Size([2, 3, 20])

Пример

Теперь создадим GRU слой с параметром batch_first=True и применим его к данным:

import torch torch.manual_seed(0) gru = torch.nn.GRU( input_size=10, hidden_size=20, num_layers=1, batch_first=True ) x = torch.randn(3, 5, 10) # batch=3, seq_len=5, features=10 output, hidden = gru(x) print(output.shape) print(hidden.shape)

Результат выполнения кода:

torch.Size([3, 5, 20]) torch.Size([1, 3, 20])

Пример

Давайте создадим двунаправленный GRU слой и применим его к последовательности:

import torch torch.manual_seed(0) gru = torch.nn.GRU( input_size=10, hidden_size=20, num_layers=1, bidirectional=True ) x = torch.randn(5, 3, 10) output, hidden = gru(x) print(output.shape) print(hidden.shape)

Результат выполнения кода:

torch.Size([5, 3, 40]) torch.Size([2, 3, 20])

Пример

Инициализируем скрытое состояние вручную и прогоним через GRU слой:

import torch torch.manual_seed(0) gru = torch.nn.GRU( input_size=5, hidden_size=10, num_layers=2 ) x = torch.randn(4, 2, 5) # seq_len=4, batch=2, features=5 h0 = torch.randn(2, 2, 10) # num_layers=2, batch=2, hidden_size=10 output, hidden = gru(x, h0) print(output.shape) print(hidden.shape)

Результат выполнения кода:

torch.Size([4, 2, 10]) torch.Size([2, 2, 10])

Смотрите также

  • класс LSTM,
    который реализует более сложный рекуррентный слой с механизмом памяти
  • класс RNN,
    который реализует базовый рекуррентный слой без вентилей
  • класс GRUCell,
    который реализует одну ячейку GRU для одного временного шага
  • класс LSTMCell,
    который реализует одну ячейку LSTM для одного временного шага
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить