Перейти к содержанию

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).