44 KiB
Журнал работы — 14 октября 2026
Передача следующему чату и сохранение состояния
По запросу пользователя создана подробная передача /opt/neiro/experiments/cats-dogs/HANDOFF.md и точка входа /opt/neiro/HANDOFF.md; ссылка добавлена в AGENTS.md. Передача содержит ограничения пользователя, SSH без сохранения пароля, карту путей, состояние процессов, прежние правки KNP, историю визуализатора и кодировки, наблюдение о четвёрке, данные/разделения/метрики v1/v2, настройки и команды, состояние CPU-оптимизаций, устройство незавершённого CUDA-прототипа и конкретный план его подключения/проверки.
Перед сохранением выполнен успешный SSH-осмотр: HTTP-сервер визуализатора PID3671 работал, HTTP200; обучений/сборок не обнаружено. Сверены каталоги данных/прогонов, git HEAD и dirty status KNP/viz, наличие обеих папок памяти Claude, показатели backend_altai_full (80,77с,626/1000) и fast_smoke (4,39с,123/200). Полная побайтная проверка этих двух прогонов не выполнялась. Runtime cats-dogs занимает около357МБ на стенде. Результаты наблюдения описаны в передаче; новые полные архивы ещё не получены.
После этого стенд перестал отвечать на10.9.8.230:22. Несколько повторных SSH-подключений, включая IdentitiesOnly=yes и ConnectTimeout=10, закончились Connection timed out. Причина недоступности не установлена; нельзя утверждать, что WSL выключен или проблема именно в VPN. Первое резервирование прервалось до получения первого нового snapshot-файла. Новая передача и CUDA-черновики пока не подтверждены на рабочей станции. Ранее сохранённые на станции скрипты/исходники/результаты остаются по прежним путям.
Создан /opt/neiro/experiments/cats-dogs/save_handoff.py для явного продолжения после восстановления связи: SSH-проверка, сохранение инвентаря/patch/флагов, полный tar.gz runtime и отдельный архив source/старых отчётов/памяти, проверка архивов, перенос пакета через rsync без удаления файлов, копия передачи в /mnt/c/KNP/HANDOFF-2026-10-14.md, удалённая SHA256-сверка. Запуск этого скрипта в текущем состоянии также завершился тайм-аутом; успешный путь переноса пока не проверен. Автозапуск/фоновый retry не создавался.
Локально сохранены все имевшиеся скрипты/модели/results, новая передача, копия правил/журнала и скриншот наблюдения в handoff-state. Сгенерированы preservation-manifest.json и SHA256SUMS; preservation-status.json честно хранит remote_verified=false. Полный новый remote-runtime.tar.gz и prior-context-and-source.tar.gz ещё не созданы. Сборка, обучение, изменение драйверов и модели в рамках этого запроса не выполнялись.
Ускорение CPU и анализ GPU / Linux
Добавлены run_batch.py, benchmark_batches.py, benchmark_backends.py, build_tuned_cpu.py, build_fast_cpu.py и perf_connection_cache.h. В run.py добавлен выбор CPU-бэкенда; в validate_v2.py — ограниченный параллельный запуск независимых экспериментов. Оригинальные библиотеки KNP не заменялись; экспериментальные сборки расположены отдельно в /home/int/run/cats-dogs.
Четыре одинаковых эксперимента 4000 train + 1000 validation: последовательная группа 91,573 с, группа из четырёх процессов 42,911 с. Веса, параметры нейронов и ответы совпали побайтно. Это ускорение группы экспериментов, а не одной временной последовательности сети.
Штатный многопоточный CPU-бэкенд не поддерживал AltAI. В отдельной копии добавлена поддержка соответствующих типов и настройка потоков. Короткий контроль 800 + 200: однопоточный 4,89 с, два потока 15,09 с, четыре 15,69 с; результаты совпали побайтно. Поэтому многопоточность одной маленькой сети не выбрана по умолчанию. Кэширование подключений построено в отдельной однопоточной библиотеке; короткий прогон завершился за 4,39 с. Полная проверка идентичности этой оптимизации ещё не завершена.
Базовый CUDA-тест на RTX 4070 Ti SUPER работает. Штатный GPU-бэкенд KNP не поддерживает AltAI/STDP; простой BLIFAT-пример дополнительно показал invalid device function, причина не установлена. По консультации GPT-6 Astra выбран узкий экспериментальный перенос STDP с сохранением порядка вычислений и проверкой состояний по шагам. Написаны gpu_stdp_types.h, gpu_stdp.cu, gpu_stdp_bridge.h, gpu_stdp_bridge.cpp. Прототип пока не собран и не проверен; готового GPU-обучения и доказанного ускорения GPU нет.
На вопрос о чистом Linux проверены официальные документы NVIDIA и Microsoft: Linux даёт независимый выбор драйвера/ядра и меньше ограничений некоторых режимов CUDA-памяти. В WSL используется драйвер Windows; установка Linux-драйвера NVIDIA внутрь WSL не подходит. Переход ОС не добавит отсутствующую реализацию AltAI/STDP. Сравнительный замер ОС не проводился, драйверы и ОС не менялись. Подробности и ссылки — experiments/cats-dogs/ACCELERATION.md.
Осмотр постоянного тестового стенда
По запросу пользователя выполнено подключение к int@10.9.8.230 (WSL), осмотрен /mnt/c/KNP. Прочитаны отчёты за 12–13 октября и память Claude Code в /home/int/.claude/projects/-mnt-c-knp/memory и /home/int/.claude/projects/-mnt-c-KNP/memory.
Проверено на момент осмотра:
- Обучение, сборка и веб-сервер визуализатора в WSL не запущены.
/mnt/c/KNP/examples/VERSIONсодержит2.0.0.- В репозитории
examplesуже были незакоммиченные правки в шести файлах:construct_network.cpp,hyperparameters.hиprepare_network_for_inference.cppмодели altai;prepare_network_for_inference.cppмодели blifat;knp/backends/gpu/cuda-backend/CMakeLists.txt;knp/base-framework/impl/model_loader.cpp. Это работа предыдущего человека, сегодня эти файлы не меняли. - Репозиторий
/mnt/c/KNP/vizпри первом осмотре был чистым. - У прогонов
sz80_30k_s1,sz80_30k_s42,sz80_60k_s42,sz40_60k_s42в/home/int/run/expпустыеresult.csv; завершённого результата нет.
Из прежних отчётов (сегодня не воспроизводилось): улучшение MNIST через специализацию колонок и торможение при распознавании; исправление ошибки каналов ModelLoader::init_channels; проблемы GPU invalid device function. Следующая обсуждавшаяся ранее идея — ON/OFF-кодирование. Новых обучений, сборок и замеров точности сегодня не запускали.
SSH и постоянные сведения о стенде
В локальный /opt/neiro/AGENTS.md добавлены постоянный адрес, пути и правило: подключаться к стенду только по запросу пользователя. Стенд предназначен для тестирования KNP и эмуляции нейроморфного процессора AltAI.
Первая проверка ssh -o BatchMode=yes ... без явного ключа завершилась Permission denied. По просьбе пользователя выполнено:
ssh-copy-id -i ~/.ssh/id_ed25519_snw.pub int@10.9.8.230
Результат: ключ уже присутствовал на сервере, добавлять его повторно не потребовалось. Проверка с -i ~/.ssh/id_ed25519_snw -o IdentitiesOnly=yes -o BatchMode=yes прошла без пароля; сервер вернул 1220WS2, наличие /mnt/c/KNP подтверждено. SSH-конфигурацию не меняли; для последующих подключений указывали ключ явно.
Запуск визуализатора
По запросу пользователя на стенде запущен статический HTTP-сервер:
nohup python3 -m http.server 8080 --bind 0.0.0.0 \
--directory /mnt/c/KNP/viz \
> /tmp/knp-viz-http.log 2>&1 < /dev/null &
- Страница:
http://10.9.8.230:8080/altai_viz.html. - Корень раздачи:
/mnt/c/KNP/viz. - Лог:
/tmp/knp-viz-http.log. - Проверено HTTP-запросом: статус
200. - Это фоновый процесс, автозапуск не настраивался. Перезапуск WSL может его остановить.
Исправление кодировки визуализатора
Пользователь прислал скриншот с неверным отображением кириллицы. Проверка показала: русский текст в файлах корректно записан в UTF-8, но HTML начинался с <title> без объявления кодировки; сервер отдавал Content-type: text/html без charset.
В начало обоих файлов на стенде добавлена строка:
<meta charset="utf-8">
Изменены:
/mnt/c/KNP/viz/altai_viz.html— готовая страница./mnt/c/KNP/viz/app.html— шаблон, чтобы объявление кодировки сохранилось при следующем формировании страницы.
Проверка: страница повторно скачана по HTTP; первые строки содержат объявление UTF-8 и корректный русский заголовок. Пользователю предложено обновить страницу через Ctrl+F5. Визуальную проверку после обновления браузера не выполняли; подтверждения пользователя пока нет. Сервер не перезапускали, пересборку страницы не выполняли, коммиты не создавали.
Ведение журнала
По запросу пользователя создан этот файл и добавлено правило ежедневного журналирования в /opt/neiro/AGENTS.md: кратко описывать обсуждения и обычные проверки, подробно — изменения и запуски. Пароли в журнал не включены.
Наблюдение: нарисованная четвёрка
Пользователь сообщил, что визуализатор не распознал нарисованную четвёрку. Сохранён предоставленный скриншот: четвёрка, лидирует ответ 5.
На скриншоте выбран режим «Колонки σ=20», показан шаг 9 из 14; ответ 5 помечен «пока лидирует». Поэтому скриншот фиксирует промежуточный ответ, окончательный результат после всех шагов не проверен. Это отдельное наблюдение, без диагностики причин, изменений кода или новых запусков. Кириллица на этом скриншоте отображается корректно.
Новая задача: различать кошек и собак
Пользователь предложил перейти от цифр к объектам, например кошкам и собакам. Проведена предварительная проверка исходников на стенде: в examples/examples/mnist-learn/global_config.h жёстко заданы 10 классов и 784 входа, данные переводятся в частотные спайки в dataset.cpp. Бинарник /home/int/knp-build/bin/mnist_learn_example существует. В anvenv есть numpy, нет PIL, torch и torchvision. Обучение и установка пакетов не запускались, исходники не менялись.
Проверен первичный источник данных: https://www.cs.toronto.edu/~kriz/cifar.html — CIFAR-10 содержит классы cat и dog с отдельной тестовой выборкой. У пользователя запрошен выбор между обучением самой SNN KNP/AltAI по изображениям и гибридным вариантом с готовым извлекателем признаков. Выбор и реализация пока не выполнены.
Реализация отдельного спайкового эксперимента
Пользователь выбрал обучение именно SNN KNP/AltAI, без готового извлекателя признаков.
- Создан
/mnt/c/KNP/cats-dogs/source— копия текущегоexamples/examples/mnist-learnвместе с прежними правками, с сохранением лицензии Apache 2.0. Исходный MNIST не менялся. В копииglobal_config.hчисло классов изменено с 10 на 2, число входов с 784 на 2048. - Вход — серое изображение 32×32, дополненное
255 − яркость(ON/OFF). Преобразование фиксированное, не обучаемое. По 20 нейронов на каждый класс. - Созданы локальные скрипты в
/opt/neiro/experiments/cats-dogs, рабочие копии на стенде в/mnt/c/KNP/cats-dogs: подготовка данных, отдельная сборка, запуск с сохранением логов/настроек/счётчиков и валидационный подбор порога. build.pyиспользует include/link-флаги рабочей сборки KNP и собирает отдельный бинарник/home/int/run/cats-dogs/build/cats_dogs(два параллельных компилятора). Сборка успешно завершилась, лог —/home/int/run/cats-dogs/build.log.- Первоначальная загрузка официального
cifar-10-binary.tar.gzоказалась медленной. Последовательную загрузку и последующую попытку через 32 HTTP Range-запроса остановили. Частичный архив и части не считаются проверенным датасетом и не использовались для обучения. - Для пилота выбран источник JPEG-превью
uoft-cs/cifar10через Hugging Face datasets-server: 800 train, 200 validation, 400 test, поровну кошек/собак. Это преобразованные JPEG, а не стандартные байты CIFAR; результат не следует называть стандартным CIFAR-бенчмарком. Индексы, seed и хеши сохраняются в manifest. - В
/home/int/anvenvчерезensurepipустановлен pip 25.1.1, затем Pillow 12.3.0 для чтения JPEG. Первая попытка pip не сработала, поскольку его в этой среде не было. Лог —/home/int/run/cats-dogs/pillow-install.log. - Первая массовая загрузка превью остановилась на HTTP 429. Добавлены кэш и повторные попытки с задержкой, параллельность запросов метаданных снижена до двух. Дополнительно создан локальный
fetch_cache.pyдля загрузки с другой машины и последующей передачи кэша на стенд.
На момент этой записи подготовка данных продолжается; результаты обучения будут добавлены ниже после фактического завершения.
Завершение первого опыта с кошками и собаками
Данные в итоге получены из JPEG-зеркала https://github.com/YoongiKim/CIFAR-10-images, закреплённого на коммите d7d05618061fe37d830fb0419063d113c575ccbc. Попытки Hugging Face также остановлены из-за HTTP 429. Окончательная подготовка выполнена prepare_jpeg.py; данные Hugging Face и частичный бинарный архив в обучении не использовались.
Подготовлены 800 train, 200 validation, 400 test, поровну классов. Метки: 0 — кошка, 1 — собака. Имена исходных файлов, параметры и SHA-256 записаны в data/manifest.json. Проверены отсутствие пересечения train/validation, размеры файлов и баланс меток. Локальные копии манифестов — в experiments/cats-dogs.
Выполненные запуски:
python3 /mnt/c/KNP/cats-dogs/run.py smoke --dataset smoke --train 100 --count 100
python3 /mnt/c/KNP/cats-dogs/run.py validation --train 800 --count 200
OPENBLAS_NUM_THREADS=1 ~/anvenv/bin/python /mnt/c/KNP/cats-dogs/tune.py ~/run/cats-dogs/validation
~/anvenv/bin/python /mnt/c/KNP/cats-dogs/prepare_contrast.py
python3 /mnt/c/KNP/cats-dogs/validate.py
python3 /mnt/c/KNP/cats-dogs/run.py test --dataset contrast_train_test --train 800 --count 400 --threshold 60
- Smoke: 49/100 верных, 1 молчание. Веса выгружены, ограничиваются параметрами STDP, прогон завершился без ошибки.
- Исходный яркостный вход, validation, порог 60: 74/200 верных, 42 молчания, 84 ошибки.
- Офлайн-симулятор на том же пороге дал 83/200, поэтому его подбор не принят. Для этого опыта модель выбиралась по настоящим прогонам KNP. Начальное состояние растра после кодирования train в симуляторе не учтено; отдельная диагностика всех причин расхождения не проводилась.
- Добавлен второй фиксированный вариант кодирования (
prepare_contrast.py): серый BT.601, вычитание box blur 5×5 с edge padding, усиление ×4, разделение положительной/отрицательной частей в ON/OFF, clipping uint8. Готовая обученная модель признаков не применяется. validate.pyпроверил 10 конфигураций только на validation: яркость с порогами 10/20/40/60 и контраст с 10/20/40/60/100/150. Выбраны контраст и порог 60: 111/200 (55,5%), 1 молчание. Полная таблица сохранена в/home/int/run/cats-dogs/selection.jsonи локально вexperiments/cats-dogs/results/selection.jsonдо запуска test.- Тест проверен один раз выбранной конфигурацией: 208/400 (52%), 183 ошибки, 9 молчаний. Кошки — 98 верных / 97 ошибок / 5 молчаний, собаки — 110 / 86 / 4. CPU-прогон train+test занял 4,7 с.
- Тестовый прогон заново обучил сеть на тех же train и seed=42.
float_weights.csv,quant_weights.csv,float_neurons.csv,quant_neurons.csvпобайтно совпали с выбранным валидационным прогоном. Результат проверки и SHA-256 —/home/int/run/cats-dogs/reproducibility.json, копия локально вresults.
Вывод: воспроизводимое STDP-обучение настоящей модели KNP/AltAI работает, но полезное различение кошек и собак не достигнуто. 52% на сбалансированном тесте близки к 50% постоянного ответа; интервал Уилсона 95% примерно 47,1–56,9%. Нельзя утверждать доказанное преимущество над угадыванием. Это один seed и небольшой JPEG-пилот, не стандартный CIFAR-бенчмарк.
Артефакты: /mnt/c/KNP/cats-dogs — исходники и скрипты; /home/int/run/cats-dogs — данные, логи и все прогоны; /opt/neiro/experiments/cats-dogs — скрипты, README, манифесты, результаты, архив исходников и обученных весов. Исходный пример MNIST и его визуализатор не менялись. Автозапуск не настраивался; фоновых обучений или загрузок этого опыта не оставлено. Следующая идея — спайковый слой локальных признаков перед классификатором; он пока не реализован.
Второй опыт: улучшение распознавания
По запросу пользователя начата работа над улучшением результата. Сохранено обучение классификатора через STDP в KNP; предобработчик контуров фиксированный, готовая обученная нейросеть не используется. Полностью спайковый извлекатель локальных признаков пока не реализован.
Изменения:
features.py: HOG-подобный дескриптор (sqrt RGB, выбор канала с наибольшим градиентом, 9 направлений, ячейки 4×4, перекрывающиеся блоки 2×2, L2-Hys). Проверены плотные HOG, HOG с грубыми цветом/яркостью, и разреженный HOG с 256 сильнейшими признаками. Вход дополняется нулями до 2048.test_features.py: проверки ориентации границ, чёрного изображения, размеров, padding, разреженности и детерминированности — прошли.run.py: добавлены параметры--data-dir,--columns,--seed,--jitter,--quant. Старые значения по умолчанию сохранены.--quant weightsвключает существующий исследовательский режимKNP_MNIST_QUANT=weightsв KNP-примере.prepare_v2.py: расширенный JPEG-набор с новым разделением. Train: 4000 (по 2000, train 0000–1999), новая validation: 1000 (train 4500–4999), новый test: 1000 (test 0200–0699). Новый test не пересекается с test первого опыта (0000–0199). Seed перемешивания 20261015, источник и commit прежние. Использован существующий JPEG-кэш, недостающие файлы скачаны с GitHub.prepare_features.py: подготовка трёх представлений с манифестами/хешами.prepare_baseline_v2.py: прежние 800 обучающих примеров первого опыта и новый test в прежнем контрастном кодировании для сравнения на одинаковых изображениях.validate_v2.py: 8 заранее заданных конфигураций на новой validation: 20/60 нейронов на класс × пороги 600/1600/4000/8000, разреженный HOG, квантование по весам, seed 42.evaluate_v2.py: однократный тест выбранной конфигурации и прежней сети, проверка идентичности весов и сохранение сравнения.
Предварительные прогоны только на прежней validation:
probe_v2.py: 6 прогонов плотных HOG/комбинированных признаков с порогами 20/60/150. Основная проблема — молчание; уprobe_hog_2065626/81920 квантованных весов нулевые.- 8 прогонов
probe_precise_*: плотный/разреженный HOG × пороги 200/600/1600/4000 с квантованием по весам. Разреженный HOG перестал молчать и дошёл до 123/200 (61,5%) на старой validation. Это диагностическая валидация, не тестовая оценка. - Отдельно вычислены скалярные произведения выгруженных весов с признаками и диагностические варианты центрирования/нормирования весов. Эти вычисления не обучали веса и не использовались как итоговый классификатор; изменения центрирования в C++ не вносились.
Смысл изменений: избежать плотного общего фона входных признаков и потери малых весов при квантовании. Веса остаются в ±255; пороги проверяются в CPU-эмуляторе, переносимость на конкретное поколение физического AltAI пока не установлена. Исходники MNIST и библиотек KNP в этом втором опыте не редактировались.
На момент записи завершена подготовка данных, идёт панель новой validation. Тестовая оценка и итоговые артефакты будут добавлены после завершения.
Результат второго опыта
Все 8 валидационных конфигураций завершены. Выбрана v2_val_c20_t4000: 20 нейронов на класс, порог 4000, разреженный HOG, KNP_MNIST_QUANT=weights, jitter 20, seed 42. На новой validation — 626/1000 (62,6%). 60 нейронов на класс не улучшили результат; лучший проверенный порог с ними дал 60,2%. Выбор сохранён в selection-v2.json до проверки test.
evaluate_v2.py завершился успешно. Одинаковый новый test, 1000 изображений:
- Новая сеть (
v2_test): 618 верных, 382 ошибки, 0 молчаний, 61,8%. Кошки 304/500, собаки 314/500. Train+test 23,27 с на CPU. - Прежняя сеть (
v1_fresh_test): 522 верных, 450 ошибок, 28 молчаний, 52,2%. Кошки 213/500, собаки 309/500. Train+test 5,55 с. - Прирост 9,6 п.п. Интервал Уилсона 95%: новая 58,7–64,8%, прежняя 49,1–55,3%. Это оценка на данном небольшом JPEG-наборе, не гарантия распознавания произвольных фотографий.
Для обеих моделей float_weights.csv, quant_weights.csv, float_neurons.csv, quant_neurons.csv побайтно совпали с соответствующими валидационными прогонами. Для прежней модели подтверждена идентичность весов первому опыту. Модель по test не перенастраивалась. Манифесты проверены: уникальность, баланс классов, отсутствие пересечений train/validation/test, новый test не пересекается со старым. Проверены синтаксис всех скриптов и тесты признаков. Среда: Python 3.14.4, numpy 2.5.4, Pillow 12.3.0.
Сохранены локально:
experiments/cats-dogs/V2.md— описание, команды, результаты и ограничения.results-v2/selection.json,comparison.json,test-settings.json,data-manifest.json,features-manifest.json,probes.json.trained-weights-v2.tar.gz— обученные веса/пороги и настройки.
На стенде остались все логи, данные и прогоны в /home/int/run/cats-dogs; скрипты и копия отчёта — в /mnt/c/KNP/cats-dogs. Нового веб-приложения не делали, визуализатор MNIST не меняли. Фоновые загрузки/обучения этого опыта завершены, автозапуск не создавался.
Что можно сделать дальше (пока не сделано): зеркальные отражения и небольшие сдвиги train; спайковый слой обучаемых локальных признаков и объединение по соседним участкам; проверка нескольких seed; при потолке STDP — отдельный опыт с другим обучением SNN. Совместимость с физическим чипом не проверена. Прирост есть, но 61,8% всё ещё недостаточно для уверенного распознавания.
Мониторинг восстановления SSH и автоматическая отправка
Пользователь явно разрешил мониторить доступ и при восстановлении отправить всю информацию. Создан experiments/cats-dogs/monitor_handoff.py: проверяет SSH каждые30с, при доступности запускает save_handoff.py, повторяет после сбоя и выходит после успешной SHA256-проверки переноса. Использует flock для защиты от второго монитора. Процесс запускается в фоне с отдельной сессией; лог/статус/PID находятся в /opt/neiro/.handoff-monitor. Перезапуск локальной машины остановит монитор: системный автозапуск не настроен.
Перенос включает всю папку эксперимента, копии журнала и AGENTS, наблюдения, сохранённые результаты/исходники/веса и CUDA-черновики. save_handoff.py сначала отправляет имеющийся локальный пакет, затем получает полный runtime-снимок и контекст со стенда и отправляет дополненный пакет. Это позволяет сохранить память раньше длительного резервирования. При отсутствии rsync на стенде используется tar по SSH. Из исходного KNP ничего не удаляется.
Непроведённый запрос iperf3: требовалось установить на стенд и выполнить iperf3 -c 10.9.8.1 -P 8 -t 5; доступ был недоступен, установка/тест не выполнялись. Этот монитор занимается сохранением информации, сетевые тесты сам не запускает.
Отмена мониторинга и экспорт ZIP
По последнему запросу пользователя остановлены фоновый монитор SSH и автоматическая доставка (группа процесса784614); дальнейшие подключения автоматически не выполняются. Последний зафиксированный ответ SSH был Connection refused, успешного переноса не было. Вместо этого создан публичный ZIP /public/knp-altai-handoff-2026-10-14.zip со всеми доступными локальными материалами этого чата: передача, правила/журнал, скрипты и CUDA-прототип, результаты/манифесты/архивы исходников и весов, наблюдения/скриншоты, состояние отменённого монитора. Недоступные новые полные снимки удалённого runtime в ZIP не включены — их не удалось получить. Пароли и SSH-ключи в архив не включались.
Вечер: перенос в git и сверка ускоренных прогонов
- Папка
/mnt/c/knpстала общим git-репозиторием (веткаmain, remotehttps://git.snw.su/int/our_knp.git). Вложенные.gitиз1/,viz/,examples/перенесены в/mnt/c/knp-nested-git-backup/, там жеexamples-local-changes.patch. Локальный DNS не резолвитgit.snw.su, поэтому в репозитории заданhttp.curloptResolve git.snw.su:443:45.141.100.133. Пуш выполняет пользователь. - Недостающие материалы передачи (HANDOFF, ACCELERATION, GPU-черновики, results v1, архивы) скопированы из ZIP в
cats-dogs/. Работа выполнялась прямо на стенде:~/run/cats-dogsна месте, SSH не нужен. - Сверка готовых файлов, без новых запусков,
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 везде | 2,4% (сеть почти всё время молчит) |
Почему 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)
Компьютер оставили на ночь: в 19:17 resume.sh перезапустил aug_v_A90k, sz80_30k_s{42,1}, sz{40,80}_60k_s42; aug_v_B30k досчитывается. Исправлен признак готовности в resume.sh: остановленный run.sh всё равно пишет ELAPSED, поэтому готовым считается только прогон со строками CLASS.
Проверить после обучения: augment/tta_sim.py aug_v_B30k val30000.bin val30000.target --first 30000 — устойчивость к сдвигу/толщине, сравнение с oo_v_base.
Аугментация B (10 000 исходных × 3 = 30 000 шагов обучения), validation
KNP: aug_v_B30k 8940/10000 = 89,4% (ориентир oo_v_base 92,5%). Устойчивость в симуляторе, 2000 картинок validation:
| Сеть | Как есть | Сдвиг 2 px | Толще 1 px | Тоньше 1 px |
|---|---|---|---|---|
oo_v_base (30 000 исходных) |
91,9% | 66,6% | 80,8% | 80,2% |
aug_v_B30k (10 000 × 3) |
87,8% | 81,5% | 79,1% | 74,9% |
Сдвиг: +15 п.п.; на чистых картинках −4 п.п. (втрое меньше уникальных исходников); к толщине устойчивость не выросла. Ждём aug_v_A90k (30 000 × 3).
Страница проверки и слой «детекторы штрихов + пулинг» (прототип вне KNP)
- Визуализатор: кнопки сдвига на 1 px и строка «Итог всех сетей» (
viz/app.html); страница с обычной сетью и аугментацией B —viz/aug_viz.html, опубликована https://claude.ai/artifact/Vc1q1WCZuPY2QAHBSGtrKF. Пользователь проверил: нарисованная тройка → «2»; аугментация сдвигами не решает другой почерк. features/stroke_features.py: детекторы штрихов (Gabor-подобные ядра) + max-пулинг, 784 значения на картинку, считается обычным кодом — проверка идеи перед переносом слоя в KNP. Вариантfine: 4 направления, пулинг 3×3 шаг 2 → 4×14×14.augment/tta_sim.py --features [--preset --scale]— устойчивость для сетей на признаках (искажение пикселей → признаки → сеть).
| Сеть (validation, 2000 картинок, симулятор) | Как есть | Сдвиг 2 px | Толще 1 px | Тоньше 1 px |
|---|---|---|---|---|
пиксели (oo_v_base) |
91,9% | 66,6% | 80,8% | 80,2% |
пиксели + аугм. B (aug_v_B30k) |
87,8% | 81,5% | 79,1% | 74,9% |
штрихи fine (f_v_plain, KNP 86,3%) |
85,2% | 61,4% | 75,1% | 71,6% |
штрихи fine + аугм. B (f_v_augB, KNP 82,2%) |
81,0% | 74,8% | 71,9% | 68,6% |
Вывод: мелкий пулинг не помог ни точности, ни устойчивости (сдвиг 2 px = целая клетка сетки 14×14). Порог не виноват (лучший 85,3% при 60). Запущен вариант coarse как у HOG: 8 направлений × 2 толщины, пулинг 5×5 шаг 4 → 16×7×7, масштаб 0,3842 (fc_v_plain, fc_v_augB).