our_knp/cats-dogs
int 979aa90bb4 Add 2026-10-14 handoff materials, verify accelerated runs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:29:08 +03:00
..
acceleration-results Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
handoff-state Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
results Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
results-v2 Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
source Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
ACCELERATION.md Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
benchmark_backends.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
benchmark_batches.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
build.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
build_fast_cpu.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
build_tuned_cpu.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
contrast-manifest.json Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
data-manifest.json Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
download.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
evaluate_v2.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
features.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
fetch_cache.py Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
gpu_stdp.cu Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
gpu_stdp_bridge.cpp Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
gpu_stdp_bridge.h Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
gpu_stdp_types.h Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
HANDOFF.md Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
monitor_handoff.py Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
perf_connection_cache.h Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
prepare_baseline_v2.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
prepare_contrast.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
prepare_data.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
prepare_features.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
prepare_jpeg.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
prepare_preview.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
prepare_v2.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
preservation-manifest.json Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
preservation-status.json Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
probe_v2.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
README.md Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
run.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
run_batch.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
save_handoff.py Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
SHA256SUMS Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
source-snapshot.tar.gz Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
test_features.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
trained-weights-v2.tar.gz Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
trained-weights.tar.gz Add 2026-10-14 handoff materials, verify accelerated runs 2026-10-14 18:29:08 +03:00
tune.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
V2.md Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
validate.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00
validate_v2.py Initial import: KNP experiments (examples, viz, cats-dogs, reports) 2026-10-14 18:17:15 +03:00

Первый эксперимент: кошки и собаки в KNP/AltAI

Более новый результат: второй эксперимент — 61,8% против 52,2% прежней сети на одном новом тесте. Ниже сохранён отчёт первого опыта.

Это обучение весов спайковой сети через KNP STDP, без готовой нейросети для извлечения признаков. CPU-бэкенд эмулирует модель нейрона AltAI; это не измерение на физическом процессоре.

Устройство

  • Отдельная копия mnist-learn: /mnt/c/KNP/cats-dogs/source на int@10.9.8.230.
  • Библиотеки берутся из рабочей сборки /home/int/knp-build; исходный пример MNIST не меняется.
  • Два класса: 0 = cat, 1 = dog; по 20 нейронов на класс.
  • Изображение 32×32 переводится в серый фиксированной целочисленной формулой BT.601. На вход подаются яркость и 255 − яркость: 2048 каналов ON/OFF.
  • Используются прежние настройки локального обучения, случайный разброс весов σ=20, seed=42; после обучения — квантование, торможение 255, добавка к порогу отключена.
  • Источник исходного примера: KasperskyLab/knp, Apache 2.0. Скопированы и прежние экспериментальные изменения; правки этого опыта в C++ ограничены двумя константами global_config.h (число классов и размер входа).

Данные

Первичный источник: CIFAR-10, Alex Krizhevsky.

Из-за медленной загрузки полного архива пилот использует JPEG-копии зеркала YoongiKim/CIFAR-10-images, закреплённого на коммите d7d05618061fe37d830fb0419063d113c575ccbc. Это не исходные байты CIFAR-10, поэтому результат нельзя напрямую выдавать за стандартный CIFAR-бенчмарк. Предварительная попытка загрузки через Hugging Face была остановлена из-за HTTP 429; её изображения не используются.

Пилот: 800 обучающих, 200 валидационных и 400 тестовых изображений, классы сбалансированы. Валидация выделена из исходного train, test — из исходного test. Список исходных индексов, SHA-256 подготовленных файлов и параметры преобразования сохраняются в data/manifest.json. Кэш JPEG позволяет повторить опыт с теми же байтами.

Файлы и запуск на стенде

Скрипты лежат в /mnt/c/KNP/cats-dogs, данные и результаты — /home/int/run/cats-dogs.

# Собрать отдельный бинарник из уже скопированного и адаптированного source.
python3 /mnt/c/KNP/cats-dogs/build.py

# Подготовить небольшую выборку (numpy и Pillow в anvenv).
~/anvenv/bin/python /mnt/c/KNP/cats-dogs/prepare_jpeg.py

# Короткая проверка на 100 обучающих и 100 проверочных изображениях.
python3 /mnt/c/KNP/cats-dogs/run.py smoke --dataset smoke --train 100 --count 100

# Обучить на train, проверить на validation.
python3 /mnt/c/KNP/cats-dogs/run.py validation --train 800 --count 200

# Подготовить второй фиксированный вариант входа: локальный контраст.
~/anvenv/bin/python /mnt/c/KNP/cats-dogs/prepare_contrast.py

# Проверить 10 заранее заданных сочетаний кодирования/порога реальным KNP.
python3 /mnt/c/KNP/cats-dogs/validate.py

# После выбора порога: реальное KNP-обучение и однократная проверка test.
# В этом опыте по validation выбраны contrast и порог 60.
python3 /mnt/c/KNP/cats-dogs/run.py test --dataset contrast_train_test \
  --train 800 --count 400 --threshold 60

run.py создаёт новую папку и отказывается перезаписывать существующий прогон. Сохраняет settings.json, полный run.log, исходную таблицу KNP result.csv, счётчики и общую точность в metrics.json, веса и пороги до/после квантования. Точность считается как доля всех верных ответов; молчание считается неуспехом. Названия PRECISION/RECALL из исходного примера не используются для итогового вывода, поскольку его счётчики имеют нестандартную семантику.

tune.py сохранён как неудачная предварительная попытка: его результат на пороге 60 разошёлся с KNP (83 против 74 верных на исходном яркостном входе). Поэтому его подбор не использовался для выбора модели. Все 10 конфигураций в selection.json измерены настоящим KNP. Причина расхождения офлайн-симулятора отдельно не исправлялась; в частности, его начальное состояние растра не учитывает предварительное кодирование train. Перед тестом сеть заново обучена на тех же train, seed и параметрах; все четыре CSV весов/порогов между выбранным валидационным и тестовым прогонами совпали побайтно (results/reproducibility.json).

Для полного исходного архива сохранены download.py (HTTP ranges с проверкой MD5) и prepare_data.py (8000/2000/2000). Загрузка полного архива в этой сессии остановлена из-за скорости, эти данные не использовались для пилота. prepare_data.py записывает файлы в переданную папку: для полного набора нужно выбрать отдельную папку, чтобы не перезаписать пилот.

Результат 14 октября

Выбраны локальный контраст (из серого изображения вычитается размытие 5×5, результат умножается на 4 и разделяется на положительный/отрицательный каналы) и порог 60. Валидация: 111/200 верных (55,5%). Отдельный тест KNP: 208/400 верных (52%), 183 ошибки и 9 молчаний. Кошки: 98 верных, 97 ошибок, 5 молчаний; собаки: 110 верных, 86 ошибок, 4 молчания.

Это пока уровень около угадывания, а не полезный классификатор. На сбалансированном тесте постоянный ответ одним классом даёт 50%. У тестовой точности примерно 47,1–56,9% по интервалу Уилсона 95%: преимущество над 50% не установлено. Один seed и маленький JPEG-набор ограничивают выводы.

Полные настройки и результаты: results/selection.json, results/test-metrics.json, results/test-settings.json. На стенде полные логи и CSV лежат в /home/int/run/cats-dogs; итоговый прогон — test. Локально сохранён архив исходников source-snapshot.tar.gz и архив обученных весов trained-weights.tar.gz. Автозапуск обучения не создавался, прежний визуализатор MNIST не менялся.

Следующий обоснованный опыт — отдельный спайковый слой локальных признаков перед классификатором, с обучением и отдельным новым тестом. Простое снижение порога и фиксированная обработка контраста уже проверены в рамках этого пилота; надёжного распознавания они не дали.