Метод insert класса ModuleList
Метод insert класса ModuleList предназначен
для вставки нового подслоя (модуля) в произвольную позицию
списка. Первым параметром метод принимает индекс позиции,
в которую необходимо вставить модуль, а вторым параметром
- сам модуль (экземпляр класса, наследующего nn.Module).
При вставке все последующие элементы сдвигаются вправо.
Метод изменяет исходный объект ModuleList и ничего
не возвращает.
Синтаксис
module_list.insert(index, module)
Пример
Давайте создадим ModuleList с двумя линейными
слоями и вставим новый слой в позицию с индексом 1:
import torch
import torch.nn as nn
# Создаём ModuleList с двумя слоями
layers = nn.ModuleList([
nn.Linear(10, 20),
nn.Linear(20, 30)
])
print(f"Количество слоёв до вставки: {len(layers)}")
# Вставляем новый слой в позицию 1
new_layer = nn.Linear(15, 25)
layers.insert(1, new_layer)
print(f"Количество слоёв после вставки: {len(layers)}")
Результат выполнения кода:
"Количество слоёв до вставки: 2"
"Количество слоёв после вставки: 3"
Пример
Теперь вставим слой в начало списка (индекс 0) и в конец (индекс, равный длине списка):
import torch
import torch.nn as nn
# Исходный список
layers = nn.ModuleList([
nn.Linear(5, 10),
nn.Linear(10, 15)
])
print(f"Начальное количество слоёв: {len(layers)}")
# Вставка в начало
layers.insert(0, nn.Linear(2, 5))
print(f"После вставки в начало: {len(layers)}")
# Вставка в конец (индекс равен длине)
layers.insert(len(layers), nn.Linear(15, 20))
print(f"После вставки в конец: {len(layers)}")
Результат выполнения кода:
"Начальное количество слоёв: 2"
"После вставки в начало: 3"
"После вставки в конец: 4"
Пример
Продемонстрируем, что метод вставляет слой именно в указанную позицию, сдвигая остальные элементы. Для этого выведем названия слоёв до и после вставки:
import torch
import torch.nn as nn
# Создаём ModuleList с именованными слоями
layers = nn.ModuleList([
nn.Linear(10, 20), # слой A
nn.Linear(20, 30), # слой B
nn.Linear(30, 40) # слой C
])
# Выводим названия слоёв до вставки
names_before = [f"слой {i}" for i in range(len(layers))]
print(f"До вставки: {names_before}")
# Вставляем новый слой в позицию 1
layers.insert(1, nn.Linear(15, 25)) # новый слой X
# Выводим названия после вставки
names_after = [f"слой {i}" for i in range(len(layers))]
print(f"После вставки: {names_after}")
Результат выполнения кода:
"До вставки: ['слой 0', 'слой 1', 'слой 2']"
"После вставки: ['слой 0', 'слой 1', 'слой 2', 'слой 3']"
Смотрите также
-
класс
ModuleList,
который представляет собой контейнер для хранения подслоёв -
метод
append,
который добавляет новый подслой в конец списка -
метод
extend,
который добавляет несколько подслоёв в конец списка -
метод
insert,
который вставляет подслой в указанную позицию