MNIST¶
MNIST используется как «зеркало» CIFAR-10 для OVA-протокола A–D (скрипт 15) и последующего multiclass-слияния (скрипт 16). Датасет — 28×28, 1 канал, 10 цифр.
Загрузка и нормализация¶
cnn_neat/cifar10_data.py обслуживает оба датасета (выбор по dataset_name(cfg)):
MNIST_MEAN = (0.1307,),MNIST_STD = (0.3081,).mnist_is_on_disk(root)/ensure_mnist_local(cfg)— гарантируют локальные файлы (по умолчанию подdata/mnist/).- Loader'ы применяют
transforms.Normalize(MNIST_MEAN, MNIST_STD)и отдают тензоры формы(B, 1, 28, 28).
Val-split, seed и логика один против остальных (one-vs-rest) — те же, что для CIFAR-10 (см. CIFAR-10); отличается только геометрия входа и число каналов.
Наборы каналов¶
Для MNIST используются grayscale-аналоги (I/O C=1, scripts/ablation/hyperparameters.py):
| Набор | allowed_channels |
allow_variable_channels |
|---|---|---|
var_mnist |
(1, 8, 16) |
True |
fixed_1 |
None (все узлы C=1) |
False |
Считывание: только mean¶
Скрипт 15 использует output_readout="mean", а не mean_minus_median. При
одноканальном выходе 1×1×1 разность «mean − median» вырождается в ноль, скор
залипает на 0, а приспособленность (fitness) — на 0.5 (случайное угадывание). Поэтому для MNIST
берётся mean. Это же правило действует в
multiclass head.
Протоколы: MNIST, один против остальных (скрипт 15), Multiclass из OVA (16).