Official benchmark suite for Catalyst neuromorphic processors. Trains spiking neural networks (SNNs) on standard neuromorphic benchmarks and deploys to Catalyst N1/N2/N3 FPGA hardware.
All results are reproducible. Clone, install, train, deploy.
| Benchmark | Classes | Architecture | Neuron | Float Acc | Params |
|---|---|---|---|---|---|
| SHD | 20 | 700→1536→20 (rec) | adLIF | 91.0% | 3.47M |
| SSC | 35 | 700→1024→512→35 (rec) | adLIF | 76.4% | 2.31M |
| N-MNIST | 10 | Conv2D+LIF→10 | LIF | 99.1% | 691K |
| GSC-12 | 12 | 40→512→12 (rec, S2S) | adLIF | 88.0% | 291K |
| DVS Gesture | 11 | Deep conv+rec | adLIF | 89.0% | ~1.2M |
All N3 models use adaptive LIF neurons with surrogate gradient BPTT and cosine LR scheduling.
| Benchmark | Classes | Architecture | Neuron | Float Acc | Params |
|---|---|---|---|---|---|
| SHD | 20 | 700→512→20 (rec) | adLIF | 84.5% | 759K |
| SSC | 35 | 700→1024→512→35 (rec) | adLIF | 72.1% | 2.31M |
| N-MNIST | 10 | Conv2D+LIF→10 | adLIF | 97.8% | 466K |
| GSC KWS | 12 | 40→512→12 (rec, S2S) | adLIF | 88.0% | 291K |
| MIT-BIH ECG | 5 | 187→128→5 (rec) | adLIF | 90.9% | ~35K |
All N2 models deploy to Catalyst N2 FPGA hardware via int16 weight quantization.
| Benchmark | Classes | Architecture | Neuron | Float Acc | Params |
|---|---|---|---|---|---|
| SHD | 20 | 700→1024→20 (rec) | LIF | 90.6% | 1.79M |
| N-MNIST | 10 | Conv2D+LIF→10 | LIF | 99.2% | 466K |
| DVS Gesture | 11 | Deep conv+rec | LIF | 69.7% | ~1.2M |
| GSC-12 | 12 | 40→512→12 (rec, S2S) | LIF | 86.4% | 291K |
N1 uses basic LIF neurons only (no adaptation). Demonstrates competitive performance through model capacity alone. The N2's adaptive threshold provides a clear efficiency advantage at matched model sizes.
Loihi 2 results from Mészáros et al. 2025 (Table I, best per-dataset).
| Benchmark | Catalyst N3 | Catalyst N2 | Catalyst N1 | Loihi 2 |
|---|---|---|---|---|
| SHD | 91.0% | 84.5% | 90.6% | 90.9% |
| SSC | 76.4% | 72.1% | - | 69.8% |
| N-MNIST | 99.1% | 97.8% | - | - |
| GSC-12 | 88.0% | 88.0% | - | - |
| Processor | LUTs | LUT% | FFs | FF% | BRAM | DSP | WNS | Fmax | Power |
|---|---|---|---|---|---|---|---|---|---|
| N1 | 20,109 | 17.2% | 30,847 | 13.2% | 52.5 (36.5%) | 14 (1.1%) | +0.008ns | 100 MHz | 0.642W |
| N2 | 26,431 | 22.6% | 38,666 | 16.5% | 52.5 (36.5%) | 16 (1.3%) | -0.168ns | ~97 MHz | 0.688W |
| N3 | 53,420 | 45.6% | 80,395 | 34.3% | 24 (16.7%) | 20 (1.6%) | -7.075ns | ~58.5 MHz | 0.867W |
| Processor | Status | Throughput | Frequency |
|---|---|---|---|
| N1 | PASS | - | 62.5 MHz |
| N2 | PASS | 8,690 ts/sec | 62.5 MHz |
| N3 | PASS | 14,512 ts/sec | 62.5 MHz |
git clone https://github.com/catalyst-neuromorphic/catalyst-benchmarks.git
cd catalyst-benchmarks
pip install -e .# SHD (Spiking Heidelberg Digits), 91.0% with N3 adLIF
python shd/train.py --neuron adlif --hidden 1536 --epochs 200 --device cuda:0 --amp
# SSC (Spiking Speech Commands), 76.4% with N3 adLIF
python ssc/train.py --hidden1 1024 --hidden2 768 --recurrent2 --epochs 70 --device cuda:0 --amp
# N-MNIST, 99.1% with Conv front-end
python nmnist/train.py --data-dir data/nmnist --epochs 80 --device cuda:0 --amp
# Google Speech Commands (KWS), 88.0% with Speech2Spikes encoding
python gsc_kws/train.py --hidden 512 --dropout 0.3 --epochs 200 --device cuda:0 --ampSHD and SSC datasets auto-download on first run. N-MNIST requires tonic. GSC requires manual download from Google Speech Commands v0.02.
Trained models deploy to Catalyst N2 via the Catalyst CLI, authenticate with a subscription or API key:
# Install the Catalyst CLI
npm install -g @catalyst-neuromorphic/cli
# Authenticate (opens browser, or use an API key)
catalyst login
# or: catalyst auth key cn_live_your_key_here
# Quantize and deploy a trained checkpoint
python shd/deploy.py --checkpoint shd_model.pt --threshold-hw 1000Or use the Python client for programmatic access:
pip install catalyst-cloudimport catalyst_cloud as cc
client = cc.Client("cn_live_your_key_here")
result = client.simulate(network_id="...", timesteps=1000)# Terminal 1
python shd/train.py --neuron adlif --device cuda:0
# Terminal 2
python nmnist/train.py --device cuda:1All models use surrogate gradient backpropagation through time (BPTT) with a fast-sigmoid surrogate gradient. The key neuron models are:
- LIF: Leaky Integrate-and-Fire with multiplicative decay. Maps to CUBA hardware neuron via
decay_v = round(beta * 4096). - adLIF: Adaptive LIF with Symplectic Euler discretization. Updates adaptation before threshold computation for richer temporal dynamics. Adaptation is training-only, and only membrane decay deploys to hardware.
Weight quantization: weight_hw = round(w_float * threshold_hw / threshold_float), clamped to int16 range.
catalyst-benchmarks/
├── common/ Shared neuron models, training loop, deployment, augmentation
│ ├── neurons.py LIF, AdaptiveLIF, ConvLIF, surrogate gradient
│ ├── training.py train_epoch, evaluate, run_training
│ ├── deploy.py quantize_weights, build_hardware_network
│ └── augmentation.py event_drop, time_stretch, spatial_jitter
├── shd/ Spiking Heidelberg Digits (20 classes, 700ch cochlea)
├── ssc/ Spiking Speech Commands (35 classes, 700ch)
├── nmnist/ Neuromorphic MNIST (10 classes, 34x34 DVS)
├── gsc_kws/ Google Speech Commands keyword spotting (12 classes, S2S)
├── dvs_gesture/ DVS128 Gesture (11 classes, 128x128 DVS), in progress
├── results.json Machine-readable benchmark results
└── pyproject.toml Dependencies and project metadata
Run neuromorphic simulations without local hardware via Catalyst Cloud:
import catalyst_cloud as cc
client = cc.Client("cn_live_your_key_here")
net = client.create_network(
populations=[
{"label": "input", "size": 700, "params": {"threshold": 1000}},
{"label": "hidden", "size": 512},
],
connections=[
{"source": "input", "target": "hidden", "topology": "random_sparse",
"weight": 500, "p": 0.3},
],
)
result = client.simulate(network_id=net["network_id"], timesteps=250)
print(result["result"]["firing_rates"])pip install catalyst-cloud- Free tier: 10 jobs/day, 1,024 neurons, no credit card
- Paid tiers: Higher limits, priority compute
Trained models deploy to Catalyst N2 FPGA hardware:
- Quantize: Float32 weights → int16, membrane decay → 12-bit fixed-point
- Deploy: Via Catalyst CLI (
catalyst deploy) or USB/UART - Evaluate: Run test set through hardware, compare to float accuracy
Typical quantization loss: <1% accuracy.
If you use these benchmarks in your research, please cite:
@misc{catalyst-benchmarks-2026,
author = {Shulayev Barnes, Henry},
title = {Catalyst Neuromorphic Benchmarks},
year = {2026},
publisher = {GitHub},
url = {https://github.com/catalyst-neuromorphic/catalyst-benchmarks}
}
@misc{catalyst-n3-2026,
author = {Shulayev Barnes, Henry},
title = {Catalyst N3: A 128-Core Hybrid Neuromorphic Processor with Hardware Virtualisation, Per-Tile Learning, and Silicon Metaplasticity},
year = {2026},
url = {https://catalyst-neuromorphic.com/research}
}
@misc{catalyst-n2-2026,
author = {Shulayev Barnes, Henry},
title = {Catalyst N2: A 128-Core Configurable Neuromorphic Processor},
year = {2026},
doi = {10.5281/zenodo.18728256},
url = {https://zenodo.org/records/18728256}
}
@misc{catalyst-n1-2026,
author = {Shulayev Barnes, Henry},
title = {Catalyst N1: A Neuromorphic Processing Architecture},
year = {2026},
doi = {10.5281/zenodo.18727094},
url = {https://zenodo.org/records/18727094}
}MIT License. See catalyst-neuromorphic.com for hardware and SDK licensing.