From b34bdae638641dd1103d318e471b5325745e969b Mon Sep 17 00:00:00 2001 From: int Date: Wed, 14 Oct 2026 19:10:08 +0300 Subject: [PATCH] Log ON/OFF and robustness results, add resume script Co-Authored-By: Claude Opus 5.5 --- augment/resume.sh | 14 ++++++++++++++ changes-2026-10-14.md | 28 ++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 augment/resume.sh diff --git a/augment/resume.sh b/augment/resume.sh new file mode 100644 index 0000000..6a077e8 --- /dev/null +++ b/augment/resume.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Relaunch runs interrupted by the 2026-10-14 shutdown. Data files are already in ~/run/exp. +# Each run.sh overwrites /result.csv; finished runs are skipped. +cd ~/run/exp +B="KNP_COL_JITTER=20 KNP_MNIST_THR=60 KNP_MNIST_ADD_THR_SCALE=0 KNP_MNIST_INFER_INHIB=255" +done_run() { grep -q ELAPSED "$1/result.csv" 2>/dev/null; } +done_run aug_v_B30k || MODEL=altai DATA=augB_val ./run.sh aug_v_B30k 30000 $B > aug_v_B30k.err 2>&1 & +done_run aug_v_A90k || MODEL=altai DATA=augA_val ./run.sh aug_v_A90k 90000 $B > aug_v_A90k.err 2>&1 & +done_run oo_v_full || MODEL=altai DATA=oofull_val ./run.sh oo_v_full 30000 $B KNP_MNIST_INPUT_SIZE=1568 > oo_v_full.err 2>&1 & +done_run sz80_30k_s42 || MODEL=altai ./run.sh sz80_30k_s42 30000 $B KNP_COL_SIZE=80 KNP_COL_SEED=42 > sz80_30k_s42.err 2>&1 & +done_run sz80_30k_s1 || MODEL=altai ./run.sh sz80_30k_s1 30000 $B KNP_COL_SIZE=80 KNP_COL_SEED=1 > sz80_30k_s1.err 2>&1 & +done_run sz40_60k_s42 || MODEL=altai ./run.sh sz40_60k_s42 60000 $B KNP_COL_SIZE=40 KNP_COL_SEED=42 > sz40_60k_s42.err 2>&1 & +done_run sz80_60k_s42 || MODEL=altai ./run.sh sz80_60k_s42 60000 $B KNP_COL_SIZE=80 KNP_COL_SEED=42 > sz80_60k_s42.err 2>&1 & +wait diff --git a/changes-2026-10-14.md b/changes-2026-10-14.md index ece0092..30ee970 100644 --- a/changes-2026-10-14.md +++ b/changes-2026-10-14.md @@ -201,3 +201,31 @@ python3 /mnt/c/KNP/cats-dogs/run.py test --dataset contrast_train_test --train 8 - Сверка готовых файлов, без новых запусков, `cmp` всех CSV (float/quant neurons/weights, result.csv): - `backend_altai_full` (tuned, 2 потока) против `v2_val_c20_t4000` (single): **все побайтно совпадают**, 626/1000. Время: tuned2 80,77 с против single 22,84 с — многопоточность в 3,5 раза медленнее. - `fast_smoke` (кэш подключений) против `backend_altai_single` (800+200): **все побайтно совпадают**, 123/200. Время 4,39 с против 4,89 с (~10% быстрее). Полный замер fast на 4000+1000 ещё не делался. + +## Вечер: ON/OFF-вход, устойчивость сети, аугментация (MNIST как полигон) + +Цель пользователя — распознавание объектов; MNIST используется как быстрый полигон, находки переносятся на кошек/собак. + +### Код +- `examples/examples/mnist-learn/global_config.h`: размер входа теперь `get_input_size()` из `KNP_MNIST_INPUT_SIZE` (по умолчанию 784); замены в `dataset.cpp`, `models/{altai,blifat}/construct_network.cpp`. Пример пересобран в `~/knp-build`. +- `onoff/prepare_onoff.py` — ON/OFF-датасеты (1568 байт: ON + OFF; режимы full/half/local). +- `viz/altai_sim.py --pix 1568` — симулятор для ON/OFF; сверка с KNP 177 против 179 из 300. +- `augment/tta_sim.py` — голосование сдвигами при ответе и проверка устойчивости в симуляторе. +- `augment/augment_mnist.py` — аугментация train: сдвиг ±2, поворот ±12°, масштаб 0,9–1,1, толще/тоньше на 1 px; eval-часть без изменений. +- `augment/resume.sh` — перезапуск прерванных прогонов. + +### Результаты (validation = train 50000–59999, обучение 30 000, настройки лучшей сети, seed 42) +| Прогон | Вход | Верно | +| --- | --- | --- | +| `oo_v_base` | обычный | **92,5%** (на тесте та же сеть `fin30k_s42` — 92,3%) | +| `oo_v_local` | ON/OFF, OFF в полосе 2 px | 56,5% | +| `oo_v_half` | ON/OFF, OFF ×0,5 везде | 55,9% (колонки 5, 8, 9 молчат) | +| `oo_v_full` | ON/OFF, OFF везде | не досчитан | + +Почему ON/OFF провалился: спайков на входе в 3–4 раза больше; на трети картинок у всех колонок отрицательная сумма весов (молчание). Не квантование: на float-весах картина та же. Следующий шаг — нормировать поток спайков (ON+OFF ≈ как раньше). + +Устойчивость лучшей сети (симулятор, 2000 тестовых картинок): как в MNIST 90,1%; сдвиг 1 px 83,8%; 2 px 63–65%; толще 1 px 78,8%; тоньше 1 px 75,5%. Сеть — набор трафаретов, поэтому нарисованные в визуализаторе цифры распознаются плохо. Голосование 9 сдвигами (±1): как есть 91,5%, сдвиг 2 px 70,0%, толще 82,7%, тоньше 85,3%. + +### Прервано выключением компьютера (перезапуск: `augment/resume.sh`) +`aug_v_B30k` (10 000 ×3 копии) — см. результат ниже, если успел; `aug_v_A90k` (30 000 ×3), `oo_v_full`, `sz80_30k_s{42,1}`, `sz{40,80}_60k_s42` остановлены вручную перед выключением. +Проверить после обучения: `augment/tta_sim.py aug_v_B30k val30000.bin val30000.target --first 30000` — устойчивость к сдвигу/толщине, сравнение с `oo_v_base`.