VickM's picture
Update README.md
6bbdc56 verified
|
Raw
History Blame Contribute Delete
4.65 kB
---
license: mit
library_name: pytorch
tags:
- spiking-neural-network
- neuroscience
- connectome
- drosophila
- olfaction
- norse
- biology
datasets:
- MIRE-org/door-olfactory-responses
pipeline_tag: tabular-classification
---
# FlyWire Olfactory SNN (MaskedRecurrentLIFSNN)
A **connectome-constrained recurrent spiking neural network** for odor identity
classification in *Drosophila melanogaster*, trained on the
[DoOR](https://github.com/ropensci/DoOR.data) olfactory receptor response dataset.
## Model description
The recurrent connectivity of this SNN is fixed to the **FlyWire** connectome
subgraph (antennal lobe projection neurons + mushroom body Kenyon cells). Synaptic
signs (excitatory/inhibitory) come from predicted neurotransmitter types in FlyWire.
Only the **weight magnitudes** are learned; the topology is biological.
### Architecture
```
Input: odor receptor vector (DoOR: ~52 receptors)
→ Linear(input_dim → hidden_dim, no bias)
→ 20 LIF timesteps with:
• Poisson spike encoding from rate-coded input
• Recurrent current: spk × (W_rec ⊙ mask ⊙ sign)ᵀ
• Norse LIFCell (surrogate gradient, α=100)
→ time-averaged spike rates
→ Linear(hidden_dim → num_classes)
```
- **Neuron model:** Leaky Integrate-and-Fire (Norse `LIFCell`, `method="super"`)
- **Recurrent mask:** Binary from FlyWire adjacency (fixed, not learned)
- **Synaptic signs:** ACh/DA/5-HT/OA → +1 (excitatory); GABA/Glu → −1 (inhibitory)
- **Training:** Adam optimizer, CrossEntropyLoss, surrogate gradients through LIF
## Files
| File | Description |
|------|-------------|
| `model.safetensors` | Trained weights (best validation checkpoint) |
| `config.json` | Architecture hyperparameters |
| `connectome_mask.npz` | FlyWire olfactory subgraph (binary adjacency + signs) |
| `connectome_meta.json` | Connectome metadata (neuron count, edge count, source) |
| `modeling_snn.py` | Standalone `MaskedRecurrentLIFSNN` class |
## Usage
```python
import scipy.sparse as sp
import torch
from safetensors.torch import load_file
# Load the model
from modeling_snn import MaskedRecurrentLIFSNN
adjacency = sp.load_npz("connectome_mask.npz")
model = MaskedRecurrentLIFSNN(
input_dim=52, # from config.json
hidden_dim=800, # from config.json
num_classes=500, # from config.json
adjacency=adjacency,
steps=20,
alpha=100.0,
)
state_dict = load_file("model.safetensors")
model.load_state_dict(state_dict)
model.eval()
# Inference
x = torch.randn(1, 52) # receptor activation vector
logits, spike_sparsity = model(x)
predicted_odor = logits.argmax(dim=1).item()
```
## Training details
- **Dataset:** DoOR (Database of Odorant Responses) — CC BY-SA 4.0
- **Cross-validation:** 5-fold over odor identities × 5 seeds = 25 runs
- **Early stopping:** patience 5 on validation accuracy
- **Optimizer:** Adam (lr=1e-3, weight_decay=1e-5)
- **Batch size:** 32
- **Max epochs:** 80
- **SNN timesteps:** 20
- **Evaluation:** 5× Monte Carlo averaging over stochastic Poisson encoding
## Connectome-Constrained Spiking Neural Networks Olfactory Classification Study
This model was used in a classification study and ran against a comparable but shuffled spiking neural network Sparse MLP, and Dense MLP models.
Summary Results may be found here: https://mire-institute.org/research-papers/connectomeconstrained-spiking-neural-networks-olfactory-classification-study
And the full research paper may be found here: https://mire-institute.org/research-papers/connectomeconstrained-spiking-neural-networks-olfactory-classification-study-preprint
## Biological basis
The model's recurrent topology is extracted from the [FlyWire](https://flywire.ai/)
whole-brain connectome of *Drosophila melanogaster* (FAFB dataset). The olfactory
subgraph includes:
- **Antennal Lobe Projection Neurons (ALPN):** relay processed odor information
- **Kenyon Cells (KC):** mushroom body neurons for associative olfactory memory
This captures the AL → PN → KC pathway that the fly uses for odor discrimination
and learning.
## Citation
If you use this model, please cite:
- The **DoOR** database: Münch & Galizia (2016). DoOR 2.0 — Comprehensive mapping
of *Drosophila melanogaster* odorant responses. *Scientific Reports*, 6, 21841.
https://doi.org/10.1038/srep21841
- The **FlyWire** connectome: Dorkenwald et al. (2024). Neuronal wiring diagram of
an adult brain. *Nature*, 634, 124–138. https://doi.org/10.1038/s41586-024-07558-y