Структурные модели самоподобных сетей
Исходный код

Установка и быстрый старт

За несколько шагов создадим сеть из двухвходовых модулей, сохраним её топологию и выполним первый расчёт. Все примеры ниже используют CPU.

Справка описывает программный интерфейс Regnets. Математические основы изложены в теории модульных сетей.

Требования и установка #

Нужен Python 3.13 или новее. Базовая установка включает Matplotlib и NetworkX. Топология, JSON, построение графов и экспорт рисунков доступны без PyTorch. Для вычисления и обучения нейронных сетей выберите вариант regnets[torch].

Установка через pip или uv #

Для использования библиотеки в своём проекте установите пакет из PyPI.

Через pip:

bash
python -m venv .venv
source .venv/bin/activate
python -m pip install regnets

В Windows активируйте окружение командой .venv\Scripts\Activate.ps1. Для варианта с PyTorch замените последнюю команду на:

bash
python -m pip install 'regnets[torch]'

Через uv:

bash
uv venv --python 3.13
uv pip install regnets

Для варианта с PyTorch замените последнюю команду на:

bash
uv pip install 'regnets[torch]'

uv pip install использует окружение .venv без его активации.

Установка из исходников #

PyPI предоставляет опубликованную версию библиотеки и её зависимости. Клон репозитория дополнительно содержит готовые примеры (examples/), утилиты командной строки (tools/), веб-визуализаторы (apps/), документацию (docs/) и тесты (tests/). Этот способ удобен для запуска примеров и приложений, изучения и изменения кода; версия библиотеки определяется выбранной ревизией репозитория.

bash
git clone https://gitverse.ru/gurgutan/self-similar-nets.git
cd self-similar-nets
python -m venv .venv
source .venv/bin/activate
python -m pip install .

Для варианта с PyTorch замените последнюю команду на:

bash
python -m pip install '.[torch]'

Настройка окружения разработки и зависимостей для приложений через uv описана в порядке разработки.

Создайте топологию #

python
from regnets.topology.lib import cooley_tukey

topology = cooley_tukey((2, 2, 2))
assert topology.n_layers == 3
assert topology.p == topology.g == (2, 2, 2)
assert topology.sizes == (8, 8, 8, 8)
assert topology.n_modules(0) == 4

indices = topology.permutations()
assert len(indices) == 4
assert all(len(row) == 8 for row in indices)
print(topology.words)

cooley_tukey возвращает объект Topology. В примере у него три слоя и по восемь контактов на входе, между слоями и на выходе. Свойства, методы и параметры описаны в справке по топологиям.

Сохраните и откройте JSON #

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

topology = cooley_tukey((2, 2, 2))
path = save_topology(topology, "topology.json", name="Первый пример")
spec = load_topology(path)
assert spec.topology == topology
assert spec.name == "Первый пример"

В визуализаторе нажмите «Открыть JSON» и выберите этот файл. Сравните режимы «Контакты» и «Модули». Файл содержит слова и размерности модулей; веса в него не записываются. save_topology перезаписывает существующий файл назначения.

Выполните расчёт #

Для этого шага нужен PyTorch. Описания Layer и MLP создают параметры при построении сети:

python
import torch

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

torch.manual_seed(7)
net = ModularNet(
    cooley_tukey((2, 2, 2)),
    Layer(kernel=MLP(hidden=(16,)), in_size=4),
    device="cpu",
)
x = torch.randn(2, 8, 4)
y = net(x)
assert y.shape == (2, 8, 4)

Здесь два объекта в пакете, восемь контактов у каждого и вектор длины четыре на каждом контакте. Ведущие пакетные измерения сохраняются. Для скалярных контактов пропустите in_size и используйте форму [..., 8].

Следующий шаг — вычисление градиентов и сохранение весов. Если результат отличается от ожидаемого, откройте раздел помощи.

Исходники раздела: docs/quickstart.md