Variable channels
Переменные каналы (3 / 8 / 16)¶
Ширина каналов задаётся на уровне узла DAG, а не ребра. Ребро u → w — это один nn.Conv2d с in_channels = C_u, out_channels = C_w.
Где хранится¶
| Поле | Модуль | Смысл |
|---|---|---|
ALLOWED_CHANNELS |
cnn_neat/config.py |
Библиотечный дефолт [3, 8, 16] |
allow_variable_channels |
ExperimentConfig |
Разрешить скрытым узлам ширину ≠ input_channels |
allowed_channels |
ExperimentConfig |
Список допустимых C (или None → дефолт библиотеки) |
node_channels |
ConvolutionalNeuralNetwork |
node_id → C для скрытых узлов |
Входные узлы и выходная вершина всегда имеют C = input_channels (для CIFAR-10 RGB это 3). Скрытый узел при allow_variable_channels=False тоже получает input_channels.
ConvolutionConnectionGene не содержит полей каналов — только топологию и геометрию свёртки.
Назначение ширины при мутации¶
При add_node_split() (разбиение ребра a → b на a → new → b):
if self.allow_variable_channels:
self.node_channels[new_id] = random.choice(self.allowed_channels)
else:
self.node_channels[new_id] = self.input_channels
Пространственный размер нового узла: среднее размеров концов ребра (см. spatial-geometry.md).
Свёртка на ребре¶
При пересборке параметров (_rebuild_parameters):
Активация на узле w после merge имеет форму (B, C_w, H_w, W_w).
Сужение / расширение каналов — обычные свёртки 1×1 или k×k с разными in_channels / out_channels; это не отдельный «проекционный» слой вне генома.
Crossover¶
Потомок наследует node_channels родителя A; узлы родителя B сдвигаются по id. Флаг allow_variable_channels и allowed_channels берутся от родителя A.
Влияние на VRAM¶
Пик активаций масштабируется линейно по C. На merge-узле с K входами одновременно живут до K тензоров размера (B, C_w, H_w, W_w).
Оценка estimate_bytes_per_sample() учитывает node_channels и release слотов (см. software/gpu.md).
Типичные конфиги study / ablation¶
| Сет | allow_variable_channels |
allowed_channels |
|---|---|---|
| Phase A, fixed baseline | False |
— (везде C=3) |
var_default (Phase B/D) |
True |
None → {3,8,16} |
channels_8_16_32 (ablation 02) |
True |
(8, 16, 32) |
См. также experiments/ablation-study.md, hyperparameters/ablation-analysis.md.