# MNIST на native Linux — 15 октября 2026 ## Что проверяли Предыдущие **71,25%** относятся к объектам: транспорт CIFAR-10 (самолёт, автомобиль, корабль, грузовик), validation 4000. Это не цифры и не кошки/собаки. Новый запуск проверяет цифры MNIST: десять классов, официальный test из 10 000 изображений после обучения на официальном train из 60 000. Разные задачи и разные разбиения: разность точностей не является эффектом GPU или улучшением одной модели. Результат нового KNP-прогона: **9223/10000 = 92.23%**. Ошибочных ответов со спайками: 633; молчаний: 144. Это реальные выходные спайки KNP, без подмены NumPy-симулятором. Старые 91,5% в отчёте 12 октября — исторический результат другой системы/сборки. ## Данные и разбиение Источник: `examples/examples/mnist-learn/MNIST.zip`, 70 000 изображений 28×28 без IDX-заголовков и текстовые метки. Независимо скачаны канонические IDX train и t10k с `https://ossci-datasets.s3.amazonaws.com/mnist/`. Проверены заголовки, размеры и полное побайтное совпадение архива с конкатенацией официальных train images + t10k images; аналогично проверены все метки. Train — первые 60 000, test — следующие 10 000. Нового shuffle, аугментаций или подбора параметров по этому test не было. Источники и SHA256: `/home/user/run/mnist-native-20261015/dataset-manifest.json`. ## Сеть и запуск Использован существующий пример KNP `examples/examples/mnist-learn`, модель AltAI. STDP-обучение на CPU, затем подготовка и квантование существующим кодом, upcast нейронов к AltAILIF и синапсов к Delta, инференс тоже на CPU. По 20 нейронов на каждый из 10 классов; 15 шагов на картинку, из них 10 активных. Настройки выбраны по историческому варианту до нового тестирования: seed 42, jitter 20, threshold 60, масштаб additional_threshold 0, глобальное торможение при инференсе 255. Обёртка: ```bash python3 /home/user/run/mnist-native-20261015/run_mnist.py ``` Точная дочерняя команда: ```bash /home/user/KNP/build/bin/mnist_learn_example --model altai --train_iters 60000 --inference_iters 10000 --images /home/user/run/mnist-native-20261015/MNIST.bin --labels /home/user/run/mnist-native-20261015/MNIST.target --training_backend /home/user/KNP/build/bin/libknp-cpu-single-threaded-backend.so --logging_level error ``` Окружение: ```json { "KNP_COL_SIZE": "20", "KNP_COL_JITTER": "20", "KNP_COL_SEED": "42", "KNP_MNIST_THR": "60", "KNP_MNIST_ADD_THR_SCALE": "0", "KNP_MNIST_INFER_INHIB": "255", "KNP_MNIST_DUMP": "/home/user/run/mnist-native-20261015/weights" } ``` Обёртка очищает унаследованные `KNP_*` и задаёт перечисленные параметры. Исходники KNP, библиотеки и объектные модели не менялись. SHA256 исполняемого файла и ключевых исходников: `code-sha256.json`. ENTER штатному примеру подаётся программно. ## Точность и время Wall дочернего процесса: **344.284 с**. До первой строки `Inference step` прошло примерно 312.058 с; инференс и оценка заняли примерно 32.226 с. Границы измерены по stdout и включают подготовку/обработку; это не чистый kernel benchmark и не сравнение CPU/GPU. Скачивание и проверка данных не входят в wall дочернего процесса. | Цифра | Верно | Молчание | Неверный ответ со спайками | | --- | --- | --- | --- | | 0 | 932 | 23 | 25 | | 1 | 1122 | 0 | 13 | | 2 | 931 | 25 | 76 | | 3 | 862 | 36 | 112 | | 4 | 901 | 10 | 71 | | 5 | 807 | 9 | 76 | | 6 | 907 | 11 | 40 | | 7 | 945 | 6 | 77 | | 8 | 916 | 16 | 42 | | 9 | 900 | 8 | 101 | `result.csv` — стандартный KNP evaluator. Accuracy посчитана как сумма TRUE_POSITIVES / 10000, а не среднее колонки ACCURACY по one-vs-rest классам. В этом evaluator FALSE_NEGATIVES означает отсутствие голосов, FALSE_POSITIVES — неверный немолчаливый ответ. При равных положительных максимумах выбирается меньший индекс класса. Отдельный `spike_diagnostics.py` восстановил покартинковые голоса из штатного stdout-observer (после upcast имена потеряны и выводятся UID; единственная популяция с индексами 0–9 идентифицирована среди двух оставшихся популяций, вторая имеет индексы до 199). Все десять строк результатов совпали с evaluator (проверяется assert). Положительных ties: **196**. Полная confusion matrix с отдельным столбцом молчаний — `spike-diagnostics.json`; покартинковые ответы и голоса — `predictions.csv`. ## Артефакты и ограничения Все файлы находятся в `/home/user/run/mnist-native-20261015`: - `run_mnist.py`, `settings.json`, `run.log`, `runner.log`, `progress.json`, `metrics.json`, `result.csv` — воспроизводимый запуск и результат. - `dataset-manifest.json`, четыре канонических gzip, `MNIST.bin`, `MNIST.target` — источники и данные. - `spike_diagnostics.py`, `spike-diagnostics.json`, `predictions.csv` — независимый разбор спайков. - `weights/float_*.csv`, `weights/quant_*.csv` — штатный dump INPUT-порогов и весов. Это не полный checkpoint. В существующем dump имя `quant_weights.csv` может перезаписываться несколькими проекциями; нельзя автоматически считать его полной матрицей растр→вход. Полную сеть пример не сериализует: существующий `save_network.h` не вызывается, а `--inference_only` фактически не загружает модель. Поэтому новый GPU-инференс цифр на тех же весах в этом опыте не проверяли. GPU-STDP текущим integer CUDA backend не реализован. CPU выбран для сохранения штатного протокола и достоверного измерения точности; guards GPU не ослаблялись, объектный GPU backend и модели не менялись. ## Продолжение Повтор обёртки меняет содержимое runtime: сначала сохранить готовые файлы или выбрать новый каталог в коде обёртки. Для GPU отдельно реализовать полное сохранение/загрузку подготовленной сети вместе с annotations и channel metadata, пройти guards и побайтный CPU/GPU gate на 8/32 изображениях, затем проверить весь test. Высокая точность на MNIST test не гарантирует устойчивость произвольной нарисованной четвёрки: сдвиги, толщина и нормализация требуют отдельной оценки. Никаких commit/push не выполнялось.