Метод extend
Метод extend класса Sequential предназначен
для добавления нескольких слоёв в конец последовательной
модели. В отличие от метода append, который добавляет
один модуль, метод extend принимает итерируемую
коллекцию модулей и добавляет их все по порядку.
Это удобно, когда нужно добавить сразу целый блок слоёв
или объединить несколько последовательных моделей.
Синтаксис
model.extend(modules)
Метод принимает один параметр:
- ⁅b⁆modules⁅/b⁆ - итерируемая коллекция (список, кортеж или другой итератор) модулей PyTorch, которые будут добавлены в конец модели
Пример
Давайте создадим последовательную модель и добавим
в неё несколько линейных слоёв с помощью метода
extend:
import torch
from torch import nn
model = nn.Sequential(
nn.Linear(10, 20),
nn.ReLU()
)
model.extend([
nn.Linear(20, 30),
nn.ReLU(),
nn.Linear(30, 5)
])
print(model)
Результат выполнения кода:
Sequential(
(0): Linear(in_features=10, out_features=20, bias=True)
(1): ReLU()
(2): Linear(in_features=20, out_features=30, bias=True)
(3): ReLU()
(4): Linear(in_features=30, out_features=5, bias=True)
)
Пример
Метод extend также может принимать другую
последовательную модель, что позволяет объединять
несколько моделей:
import torch
from torch import nn
model1 = nn.Sequential(
nn.Linear(10, 20),
nn.ReLU()
)
model2 = nn.Sequential(
nn.Linear(20, 15),
nn.ReLU(),
nn.Linear(15, 5)
)
model1.extend(model2)
print(model1)
Результат выполнения кода:
Sequential(
(0): Linear(in_features=10, out_features=20, bias=True)
(1): ReLU()
(2): Linear(in_features=20, out_features=15, bias=True)
(3): ReLU()
(4): Linear(in_features=15, out_features=5, bias=True)
)
Пример
Важно отметить, что размерности слоёв должны соответствовать друг другу. Давайте посмотрим, что произойдёт при несоответствии размерностей:
import torch
from torch import nn
model = nn.Sequential(
nn.Linear(10, 20)
)
model.extend([
nn.Linear(30, 5) # Неправильная размерность
])
x = torch.randn(5, 10)
try:
y = model(x)
except RuntimeError as e:
print("Ошибка:", str(e)[:60], "...")
Результат выполнения кода:
"Ошибка: mat1 and mat2 shapes cannot be multiplied (5x20 and 30x5) ..."
Смотрите также
-
класс
Sequential,
который определяет контейнер для последовательного выполнения слоёв -
метод
append,
который добавляет один слой в конец последовательной модели -
метод
insert,
который вставляет слой на указанную позицию в модели -
метод
pop,
который удаляет последний слой из последовательной модели