8.5 KiB
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.
Обёртка:
python3 /home/user/run/mnist-native-20261015/run_mnist.py
Точная дочерняя команда:
/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
Окружение:
{
"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 не выполнялось.