Skip to main content

Regnets — самоподобные сети

Regnets задаёт топологию модульных нейронных сетей числовыми словами, строит перестановки контактов и вычисляет самоподобные сети в PyTorch. Топологию можно сохранить в JSON и визуализировать в SVG или PNG.

Построение топологий и чтение JSON используют только стандартную библиотеку Python; вычисление выходов выполняет модуль modular, статическую визуализацию — topology.viz через Matplotlib. При установке пакета зависимости PyTorch, Matplotlib и NetworkX устанавливаются вместе с ним.

Установка

Требуется Python 3.13 или новее. После публикации пакета на PyPI:

python -m pip install regnets

Быстрый старт

from topology.lib import cooley_tukey

topology = cooley_tukey((2, 2, 2))
permutations = topology.permutations()
print(len(permutations))  # 4

Основные модули: topology — построение и сохранение топологий, modular и kernels — модели и ядра PyTorch, topology.viz — визуализация. Исходный код и подробная документация доступны в репозитории проекта. Лицензия проекта — MIT.

Топология

Теоретические материалы по модульным сетям: dorogov.su.

Основной формат хранения и обмена топологиями — JSON версии 1: числовые слова words, размерности входов p и выходов g каждого слоя, свободное имя и признак двойственности. Полное описание полей, пример и правила проверки закреплены в документе дизайна.

from topology.lib import cooley_tukey, good, haar

p = (2,) * 10  # 1024 входа, десять слоёв
topology = cooley_tukey(p)
permutations = topology.permutations()

good_topology = good(p)
haar_topology = haar(p)
frequency_topology = cooley_tukey(p, decimation="frequency")

Стандартные функции возвращают объект Topology со словами и размерностями модулей. Число слоёв определяется длиной p. Если g не указано, выходная размерность каждого модуля равна его входной размерности.

Топологию можно создать вручную:

from topology import Topology

topology = Topology(
    [
        [1, 2, 3],
        [-1, 2, 3],
        [-1, -2, 3],
        [-1, -2, -3],
    ],
    p=(2, 2, 2),
)

Положительное число i + 1 обозначает u_i, отрицательное -(i + 1) — v_i. Первый элемент слова соответствует младшему разряду. Для n слоёв задаётся n + 1 слов; выходное поле предыдущего слоя совпадает со входным полем следующего.

Подробные соглашения, примеры индексов и границы поддерживаемых схем описаны в описании модуля топологии.

Сохранение и загрузка топологии

Топологию и размерности модулей можно сохранить в JSON-файл и затем загрузить:

from topology.io import load_topology, save_topology
from topology.lib import cooley_tukey

p = (2, 2, 2)
g = (2, 2, 2)
topology = cooley_tukey(p, g=g)
path = save_topology(topology, "topology.json", name="Моя топология")
loaded = load_topology(path)
assert loaded.name == "Моя топология"
assert loaded.topology == topology
assert (loaded.topology.p, loaded.topology.g) == (p, g)
permutations = loaded.topology.permutations()

name — произвольное имя, которое не влияет на связи. save_topology записывает JSON версии 1 в UTF-8, перезаписывает существующий файл и возвращает путь к нему. load_topology проверяет файл и возвращает спецификацию с топологией и её метаданными. Если передать сохранению эту спецификацию, исходные имя и флаг dual сохранятся; необязательный name позволяет заменить имя. При сохранении самого Topology записывается его текущее состояние с dual: false. Файл не содержит весов нейронной сети.

Модель PyTorch

from modular import ModularNet, Layer
from kernels import MLP
from topology.lib import cooley_tukey

net = ModularNet(
    cooley_tukey((2,) * 8),
    layers=Layer(kernel=MLP(hidden=(64, 32)), shared=False, residual=True, in_size=16),
    device="cpu",
)
# net(x): [..., 256, 16] → [..., 256, 16]

shared=True разделяет параметры между позициями внутри слоя; shared=False хранит независимые параметры упакованными тензорами. Вычисления всех позиций выполняются пакетно. Параметры разных слоёв независимы. Для скалярных контактов пропустите in_size; для разных слоёв передайте список Layer. Описание блоков, остаточных связей и сохранения: вычислительная модель.

Исполняемый пример одного синтетического шага обучения на CPU из клонированного репозитория (после uv sync):

CUDA_VISIBLE_DEVICES='' uv run python examples/modular_cpu.py

SVG и PNG из JSON

from topology.viz import render_topology

render_topology("topology.json")  # создаёт topology.svg рядом с JSON
render_topology("topology.json", "network.png", mode="modules")

Отдельная утилита командной строки из клонированного репозитория:

uv run python tools/render_topology.py examples/topology.json -o build/topology.svg
uv run python tools/render_topology.py examples/topology.json -m modules -o build/modules.png

По умолчанию рисуются контакты; -m modules выбирает модули. Формат выбирается расширением .svg или .png, --dpi задаёт разрешение PNG. Web App и экспорт используют одно построение графа; браузер для экспорта не нужен. Подробности: модуль визуализации и CLI.

Web UI

Открыть визуализатор на GitVerse Pages.

Браузерная версия для GitVerse Pages работает без Python-сервера; исходники находятся в apps/topology_pages. Она сохраняет стандартные и ручные топологии, оба представления графа, инспектор, поиск, диапазон слоёв и обмен JSON/PNG.

npm ci
npm test
npm run build
python3 -m http.server 8051 --bind 127.0.0.1 --directory build/pages

Сборка включает фиксированную версию Cytoscape из npm, общий CSS и базовые стили графа из приложения Dash. Обращения к внешнему CDN не нужны. Для сборки нужен Python 3.12+ со стандартной библиотекой; зависимости Dash и PyTorch не устанавливаются. Проверки npm test сравнивают браузерные графы с Python для 112 сочетаний схем, размерностей и диапазонов, включая двойственные модели. Инструкция публикации: GitVerse Pages.

Отдельное приложение на Dash и Dash Cytoscape находится в apps/topology_explorer. Запуск из корня проекта:

uv run --group ui python -m apps.topology_explorer

Откройте http://127.0.0.1:8050. По умолчанию показаны все контакты и связи сети на 16 входов. Кнопки 16, 64 и 256 строят соответствующие сети целиком. Можно выбрать стандартную схему, изменить размерности ядер, задать собственные слова, включить двойственную модель, перейти к контакту по номеру, переключиться на модули, сохранить JSON или рисунок PNG. Настройки каждого сеанса хранятся в его странице браузера.

Порядок работы, формат файлов и ограничения описаны в руководстве визуализатора.

Разработка и проверки

Исходники находятся в src, топологии собраны в пакет src/topology. После клонирования репозитория создайте окружение командой uv sync. Проверки выполняются из корня проекта:

uv run --group ui python -m pytest -q
uv run --group ui python -m ruff check src apps tests tools examples --extend-select I
uv run --group ui python -m ruff format --check src apps tests tools examples
uv run --group ui python -m pyright src apps tests tools examples

Metadata

Release files for regnets 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for regnets 0.1.0
File Size Uploaded Provenance Actions
regnets-0.1.0.tar.gz 46.0 kB Without provenance Details for regnets-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for regnets 0.1.0
File Interpreter ABI Platform Actions
regnets-0.1.0-py3-none-any.whl Python 3 none any Details for regnets-0.1.0-py3-none-any.whl

Total release size: 76.3 kB

Release files / regnets-0.1.0.tar.gz

Download URL regnets-0.1.0.tar.gz
Size 46.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b695bd6023bf2a16579e23363ef52b1e89da1260a29cf4a3b90a777750dd39bf
BLAKE2b-256 checksum
How to use checksums
fb08cba57533ba60569813c02cff31a28d22eac047be60599c5e58ee8249ccb7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / regnets-0.1.0-py3-none-any.whl

Download URL regnets-0.1.0-py3-none-any.whl
Size 30.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
36ddd6ef71ff7d19e9434bed146536d9315a088cdd7db8072520071acdb39fa6
BLAKE2b-256 checksum
How to use checksums
e6eafc2d481d6b7f50bed07b22d202a14951593ded4b1e957e10474bbff62e78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for regnets 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page