Класс RNN
Класс RNN применяется для создания рекуррентной нейронной сети.
Первым параметром передаётся размер входных признаков input_size,
вторым - размер скрытого состояния hidden_size.
Третьим параметром можно задать количество слоёв num_layers
(по умолчанию 1). Четвёртым параметром
передаётся функция активации nonlinearity
(по умолчанию 'tanh', можно выбрать 'relu').
Пятым параметром задаётся направление сети
bidirectional (по умолчанию False).
Шестым параметром передаётся коэффициент dropout
(по умолчанию 0.0).
Синтаксис
torch.nn.RNN(input_size, hidden_size, num_layers, nonlinearity, bias, batch_first, dropout, bidirectional)
Пример
Давайте создадим простую однослойную RNN с функцией активации tanh:
import torch
layer = torch.nn.RNN(input_size=3, hidden_size=5)
print(layer)
Результат выполнения кода:
RNN(3, 5)
Пример
Давайте создадим двухслойную RNN с функцией активации ReLU:
import torch
layer = torch.nn.RNN(
input_size=10,
hidden_size=20,
num_layers=2,
nonlinearity='relu',
batch_first=True
)
print(layer)
Результат выполнения кода:
RNN(10, 20, num_layers=2, batch_first=True)
Пример
Давайте создадим двунаправленную RNN с dropout:
import torch
layer = torch.nn.RNN(
input_size=5,
hidden_size=10,
num_layers=3,
dropout=0.2,
bidirectional=True
)
print(layer)
Результат выполнения кода:
RNN(5, 10, num_layers=3, dropout=0.2, bidirectional=True)
Пример
Давайте применим RNN к входным данным с размерностью (длина последовательности, размер батча, размер признаков):
import torch
torch.manual_seed(0)
layer = torch.nn.RNN(input_size=4, hidden_size=6)
input_t = torch.randn(5, 3, 4)
output, hidden = layer(input_t)
print(output.shape)
print(hidden.shape)
Результат выполнения кода:
torch.Size([5, 3, 6])
torch.Size([1, 3, 6])
Пример
Давайте передадим начальное скрытое состояние в RNN:
import torch
torch.manual_seed(0)
layer = torch.nn.RNN(input_size=4, hidden_size=6)
input_t = torch.randn(5, 3, 4)
h0 = torch.randn(1, 3, 6)
output, hidden = layer(input_t, h0)
print(output.shape)
print(hidden.shape)
Результат выполнения кода:
torch.Size([5, 3, 6])
torch.Size([1, 3, 6])
Пример
Давайте используем RNN с параметром batch_first=True, где размерность входных данных (батч, длина последовательности, признаки):
import torch
torch.manual_seed(0)
layer = torch.nn.RNN(
input_size=4,
hidden_size=6,
batch_first=True
)
input_t = torch.randn(3, 5, 4)
output, hidden = layer(input_t)
print(output.shape)
print(hidden.shape)
Результат выполнения кода:
torch.Size([3, 5, 6])
torch.Size([1, 3, 6])