Класс Sequential
Класс Sequential представляет собой контейнер, который объединяет несколько слоёв нейронной сети в последовательную цепочку. Данные проходят через слои один за другим: выход предыдущего слоя становится входом для следующего. Первым параметром конструктор принимает список слоёв, переданных в виде аргументов или списка.
Синтаксис
torch.nn.Sequential(*layers)
Пример
Давайте создадим простую последовательную модель из двух линейных слоёв с функцией активации ReLU между ними:
import torch
import torch.nn as nn
model = nn.Sequential(
nn.Linear(10, 20),
nn.ReLU(),
nn.Linear(20, 5)
)
print(model)
Результат выполнения кода:
Sequential(
(0): Linear(in_features=10, out_features=20, bias=True)
(1): ReLU()
(2): Linear(in_features=20, out_features=5, bias=True)
)
Пример
Можно создать модель, передав слои в виде списка через оператор распаковки:
import torch
import torch.nn as nn
layers = [
nn.Linear(5, 10),
nn.Sigmoid(),
nn.Linear(10, 3)
]
model = nn.Sequential(*layers)
t = torch.randn(1, 5)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 3])
Пример
После создания модели к слоям можно обращаться по индексу или имени (по умолчанию - порядковый номер):
import torch
import torch.nn as nn
model = nn.Sequential(
nn.Linear(8, 16),
nn.Tanh(),
nn.Linear(16, 4)
)
first_layer = model[0]
print(first_layer)
last_layer = model[2]
print(last_layer)
Результат выполнения кода:
Linear(in_features=8, out_features=16, bias=True)
Linear(in_features=16, out_features=4, bias=True)
Пример
Подадим случайные данные на вход модели и получим результат прямого прохода:
import torch
import torch.nn as nn
torch.manual_seed(0)
model = nn.Sequential(
nn.Linear(4, 8),
nn.ReLU(),
nn.Linear(8, 2)
)
t = torch.randn(3, 4)
res = model(t)
print(res)
Результат выполнения кода:
tensor([[-0.0598, -0.1504],
[-0.5281, -0.3645],
[ 0.5645, -0.2264]], grad_fn=<AddmmBackward0>)