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

Метод children

Метод children класса Module возвращает итератор, который перебирает все непосредственные дочерние модули текущего модуля. В отличие от метода modules, который рекурсивно обходит все вложенные подмодули, метод children возвращает только модули первого уровня вложенности. Этот метод полезен, когда нужно получить доступ только к прямым дочерним слоям модели без обхода всей иерархии.

Синтаксис

module.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() self.dropout = nn.Dropout(0.5) model = MyModel() children = list(model.children()) print(children)

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

[Linear(in_features=10, out_features=20, bias=True), Linear(in_features=20, out_features=30, bias=True), ReLU(), Dropout(p=0.5, inplace=False)]

Пример

Рассмотрим разницу между методами children и modules на примере модели с вложенными модулями:

import torch import torch.nn as nn class Block(nn.Module): def __init__(self): super().__init__() self.conv = nn.Conv2d(3, 64, 3) self.bn = nn.BatchNorm2d(64) class MyModel(nn.Module): def __init__(self): super().__init__() self.block1 = Block() self.block2 = Block() self.fc = nn.Linear(64, 10) model = MyModel() print("Children:") for i, child in enumerate(model.children()): print(f"{i}: {type(child).__name__}") print("\nAll modules:") for i, mod in enumerate(model.modules()): print(f"{i}: {type(mod).__name__}")

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

Children: 0: Block 1: Block 2: Linear All modules: 0: MyModel 1: Block 2: Conv2d 3: BatchNorm2d 4: Block 5: Conv2d 6: BatchNorm2d 7: Linear

Как видно из примера, метод children возвращает только три модуля первого уровня (два блока и линейный слой), в то время как modules рекурсивно обходит все вложенные слои внутри блоков.

Пример

Используем метод children для итерации по дочерним модулям и применения к ним операций:

import torch import torch.nn as nn class MyModel(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(3, 16, 3) self.conv2 = nn.Conv2d(16, 32, 3) self.fc = nn.Linear(32, 10) self.dropout = nn.Dropout(0.3) model = MyModel() for name, child in model.named_children(): print(f"{name}: {type(child).__name__}")

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

conv1: Conv2d conv2: Conv2d fc: Linear dropout: Dropout

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

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

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