ANN to SNN Conversion Tools Compared
snnTorch, SpikingJelly, SNNToolbox, and NeuroCUDA all touch the same problem: turning conventional neural networks into spiking ones. They solve different parts of it. Here is what each actually does.
"ANN to SNN conversion" gets used loosely across a handful of tools that don't do quite the same thing. Some are training frameworks for building spiking networks with surrogate-gradient backpropagation from the start. Others are specifically conversion tools that take an already-trained conventional network and transform it into spiking form after the fact. Knowing which category a tool falls into will save you from picking the wrong one for the job.
snnTorch
snnTorch is a PyTorch-based library for building and training spiking neural networks using surrogate gradient descent. It is widely used as an entry point into neuromorphic computing because of its extensive tutorials and tight integration with familiar PyTorch workflows. It is primarily a training-from-scratch tool, not a converter for models you've already trained as conventional ANNs.
SpikingJelly
SpikingJelly covers similar ground to snnTorch - PyTorch-based SNN training with surrogate gradients - with a stronger emphasis on computational efficiency, including CUDA-accelerated neuron simulation for faster training at scale. Like snnTorch, it is oriented toward training spiking networks directly rather than converting pretrained conventional models.
SNNToolbox
SNNToolbox is one of the older, dedicated ANN-to-SNN conversion tools - it takes weights from a trained conventional network (originally built for frameworks like Keras and Caffe) and converts them into a spiking equivalent. It established much of the conversion methodology the field still uses, but residual architectures with skip connections remain a difficult case for conversion tooling broadly, since correctly summing multiple incoming branches during execution is easy to get wrong.
NeuroCUDA
NeuroCUDA is also a dedicated conversion tool, built specifically around PyTorch models. It uses QCFS (quantization-clip-floor-shift) calibration to align a trained ANN's activations with spiking integrate-and-fire neuron behavior, then applies backpropagation-through-time (BPTT) fine-tuning to recover accuracy. Measured results: a 3-layer CNN converts to 99.88% ± 0.02% on N-MNIST against a 99.70% ANN baseline (the SNN actually edges out the ANN here), and a ResNet-18 on CIFAR-10 converts with a 0.95% accuracy gap (94.61% ± 0.14% SNN vs. 95.56% ± 0.11% ANN).
Comparison table
| Tool | Approach | Residual/ResNet support | Hardware backends |
|---|---|---|---|
| snnTorch | Train SNN from scratch (surrogate gradient) | Depends on user's architecture | GPU/CPU (simulation) |
| SpikingJelly | Train SNN from scratch (surrogate gradient) | Depends on user's architecture | GPU/CPU (CUDA-optimized) |
| SNNToolbox | Convert pretrained ANN weights | Known difficult case | GPU/CPU (simulation) |
| NeuroCUDA | QCFS calibration + BPTT fine-tune conversion | Bit-exact NIR round-trip, 0.000000 max diff | GPU, CPU, Loihi 2 simulator |
The residual network problem, specifically
Most conversion tooling, including SNNToolbox, handles simple feed-forward architectures cleanly but runs into trouble with skip connections - the branching structure in architectures like ResNet that require correctly summing multiple input paths at a single node. NeuroCUDA's contribution here is narrow but concrete: its NIR (Neuromorphic Intermediate Representation) executor uses a topological sort (Kahn's algorithm) with explicit multi-input summation at branch points, verified bit-exact - 0.000000 maximum absolute difference - on a full ResNet-18 round-trip. This doesn't make NeuroCUDA a universally better tool than the others; it makes it a more reliable choice specifically when your model has residual connections and you need the converted spiking version to match the original computation exactly.
Picking the right tool
- Training a spiking network from scratch, no pretrained model: snnTorch (easier ramp-up) or SpikingJelly (faster at scale).
- Converting a simple feed-forward pretrained model: SNNToolbox or NeuroCUDA both apply.
- Converting a pretrained model with residual/skip connections, and you need verified accuracy and bit-exact export: NeuroCUDA.
- Need the result to run on a Loihi 2 simulator without an SDK dependency: NeuroCUDA, see the deployment guide.
Sources & further reading
- snnTorch documentation, snntorch.readthedocs.io
- SpikingJelly repository, github.com/fangwei123456/spikingjelly
- SNNToolbox conversion methodology, original publications on ANN-to-SNN conversion
- NeuroCUDA source and verified benchmark results, github.com/Krishnav1/neurocuda
Frequently asked questions
What is the best tool for ANN to SNN conversion?
It depends on whether you want to train a spiking network natively or convert an already-trained model. snnTorch and SpikingJelly are best for training SNNs from scratch with surrogate gradients. SNNToolbox and NeuroCUDA focus specifically on converting pretrained ANN weights into spiking form, with NeuroCUDA additionally validating multi-backend execution and NIR export.
What is the difference between snnTorch and SpikingJelly?
Both are PyTorch-based libraries for training spiking neural networks using surrogate gradient methods. snnTorch focuses on accessibility and tutorials for newcomers to neuromorphic computing, while SpikingJelly emphasizes performance optimizations like CUDA-accelerated neuron simulation for large-scale training.
Does SNNToolbox support modern architectures like ResNet?
SNNToolbox supports converting standard feed-forward and convolutional architectures, but residual networks with skip connections are a known difficult case for ANN-to-SNN conversion tooling generally, since the conversion needs to correctly handle multi-input summation at branch points.
What does NeuroCUDA do differently from other conversion tools?
NeuroCUDA combines QCFS calibration with backpropagation-through-time fine-tuning for conversion, exports to the vendor-neutral NIR format with a verified bit-exact executor for residual graphs, and validates execution across GPU, CPU, and a Loihi 2 simulator backend with measured, published accuracy numbers.