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

Метод named_children

Метод named_children класса Module возвращает итератор, который выдает пары (имя, дочерний модуль) для всех непосредственных дочерних модулей текущего модуля. В отличие от метода children, который возвращает только модули, named_children также возвращает имена этих модулей. Метод не принимает никаких параметров и возвращает объект-итератор, который можно использовать в циклах или преобразовывать в список.

Синтаксис

module.named_children()

Пример

Давайте создадим простую модель с несколькими дочерними модулями и переберем их с помощью метода named_children:

import torch import torch.nn as nn class MyModel(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(10, 20) self.fc2 = nn.Linear(20, 30) self.relu = nn.ReLU() model = MyModel() for name, child in model.named_children(): print(f"Name: {name}, Type: {child.__class__.__name__}")

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

"Name: fc1, Type: Linear" "Name: fc2, Type: Linear" "Name: relu, Type: ReLU"

Пример

Давайте получим все дочерние модули в виде списка кортежей с помощью преобразования итератора:

import torch import torch.nn as nn class MyModel(nn.Module): def __init__(self): super().__init__() self.encoder = nn.Linear(10, 20) self.decoder = nn.Linear(20, 10) self.activation = nn.Tanh() model = MyModel() children_list = list(model.named_children()) print(children_list)

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

[ ('encoder', Linear(in_features=10, out_features=20, bias=True)), ('decoder', Linear(in_features=20, out_features=10, bias=True)), ('activation', Tanh()), ]

Пример

Важно отметить, что named_children возвращает только непосредственные дочерние модули, но не вложенные. Давайте проверим это на примере модели с вложенными модулями:

import torch import torch.nn as nn class SubModule(nn.Module): def __init__(self): super().__init__() self.linear = nn.Linear(5, 5) self.activation = nn.ReLU() class MainModule(nn.Module): def __init__(self): super().__init__() self.input_layer = nn.Linear(10, 5) self.sub = SubModule() self.output_layer = nn.Linear(5, 2) model = MainModule() for name, child in model.named_children(): print(name)

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

"input_layer" "sub" "output_layer"

Как видите, вложенные модули внутри SubModule не были возвращены методом named_children.

Пример

Метод named_children удобно использовать для изменения параметров дочерних модулей. Давайте отключим градиенты для всех дочерних линейных слоев модели:

import torch import torch.nn as nn class MyModel(nn.Module): def __init__(self): super().__init__() self.layer1 = nn.Linear(10, 20) self.layer2 = nn.Linear(20, 30) self.layer3 = nn.Linear(30, 10) model = MyModel() for name, child in model.named_children(): if isinstance(child, nn.Linear): for param in child.parameters(): param.requires_grad = False print(f"Disabled gradients for {name}")

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

"Disabled gradients for layer1" "Disabled gradients for layer2" "Disabled gradients for layer3"

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

  • метод children,
    который возвращает итератор по дочерним модулям без имен
  • метод named_parameters,
    который возвращает итератор по именованным параметрам модуля
  • метод named_modules,
    который возвращает все модули в иерархии с их именами
  • метод named_buffers,
    который возвращает итератор по именованным буферам модуля
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить