SpliceMamba β checkpoints
Splice site prediction from pre-mRNA sequence: every position in a 15 kb window is classified as donor, acceptor, or neither. Same task and same train/test split as SpliceAI, with a Mamba-based architecture instead of dilated convolutions.
This repository holds the full training checkpoints for every model version and
ablation. Each .pt retains optimizer and scheduler state, so any of them can be
resumed, not just used for inference.
Architecture (v3 onward)
Input (B, 4, 15000) one-hot DNA
-> DeepConvStem: 4 dilated residual blocks (dilations 1/4/10/25, ~641 bp receptive field)
-> Sinusoidal positional encoding
-> BiMamba2 encoder: 8 layers/direction, d_model=256, d_state=64, expand=2
-> Coarse head (auxiliary loss, lambda=0.1)
-> Sliding-window attention: 4 layers + FFN, window_radius=400, 8 heads
-> Refined head (primary loss, lambda=1.0)
Dual-head design: the coarse head supplies auxiliary gradient to the encoder, the
refined head produces final predictions. Both emit (B, L, 3) logits.
Only positions [5000:10000] of each window carry labels; the outer 5 kb on each
side is context-only flanking. Classes are {0: neither, 1: acceptor, 2: donor}.
Contents
| Path | What it is |
|---|---|
v2-ce/, focal-loss/ |
Early loss-function comparison (weighted CE vs focal) |
v3/ |
First dual-head model |
v5.0/ |
Main classification model |
v6/, v6.1/ |
v5 + adversarial codon-phase removal (DANN guesser head) |
v7/, v7.1/ |
Stabilised adversarial phase removal |
v8/ |
Quantitative / PSI-style objective β different task, see below |
ablation/ |
12-config sweep over d_model, n_mamba_layers, n_attn_layers, window_radius |
ensemble/model_1..5/ |
5-model ensemble, different seeds and validation splits |
aug-*/ |
Trained on CDS-shuffled / codon-masked augmentations |
Recorded validation AUPRC
Values below are the best_auprc field stored inside each best.pt at checkpoint
time (validation set, splice classes). They are not chr1 test-set numbers.
| Model | Val AUPRC | Epoch |
|---|---|---|
aug-codon_mask1 |
0.9848 | 5 |
ablation/d_model-512_n_attn-8_w200 |
0.9716 | 9 |
ablation/d_model-512 |
0.9707 | 9 |
v5.0 |
0.9705 | 23 |
v6.1 |
0.9679 | 5 |
v7 |
0.9651 | 2 |
ablation/n_attn-8 |
0.9647 | 9 |
v6 |
0.9636 | 10 |
v7.1 |
0.9629 | 1 |
ensemble/model_2 |
0.9584 | 14 |
ablation/window_radius-1600 |
0.9587 | 3 |
ablation/window_radius-200 |
0.9584 | 4 |
ablation/n_mamba-16 |
0.9576 | 3 |
ablation/baseline-10ep |
0.9573 | 3 |
ensemble/model_3 |
0.9556 | 5 |
ensemble/model_4 |
0.9554 | 5 |
ensemble/model_1 |
0.9533 | 14 |
v3 |
0.9531 | 6 |
ensemble/model_5 |
0.9531 | 6 |
ablation/n_mamba-4 |
0.9513 | 4 |
ablation/d_model-128 |
0.9477 | 4 |
aug-codon_shuffle |
0.9399 | 9 |
v2-ce |
0.9287 | 19 |
aug-nt_shuffle |
0.9121 | 5 |
focal-loss |
0.9133 | 10 |
ablation/n_mamba-12 |
0.2647 | 1 |
ablation/n_mamba-12 diverged and is kept only for completeness.
The aug-* models are trained and validated on shuffled-CDS data, so their AUPRC
is not comparable to the others β the shuffling changes the label distribution.
v8 is a different objective
v8/ checkpoints optimise a quantitative (PSI-style) target rather than 3-class
site classification, so they store step and a val dict of correlation metrics
instead of best_auprc. Best recorded validation Spearman:
| Checkpoint | Spearman (mean) | Pearson (global) | Match rate |
|---|---|---|---|
protected_best.pt |
0.347 | 0.670 | 0.657 |
complete_best.pt |
0.343 | 0.649 | 0.568 |
phase2careful_best.pt |
0.336 | 0.671 | 0.674 |
frozenlocal_best.pt |
0.328 | 0.629 | 0.843 |
strengthen_best.pt |
0.315 | 0.649 | 0.796 |
These also carry a different model state_dict shape and will not load into the
classification model class.
Loading
import torch
from huggingface_hub import hf_hub_download
path = hf_hub_download("msparsa/splicemamba", "v5.0/best.pt")
ck = torch.load(path, map_location="cpu", weights_only=False)
model.load_state_dict(ck["model"]) # inference
# ck["ema"], ck["optimizer"], ck["scheduler"], ck["config"] also present
To resume training, pass the file to train.py --resume. Model code (model.py,
train.py, dataset.py) is not included here β see the project repository.
Notes
- Checkpoints from v5.0 onward include an
emastate dict alongsidemodel. ensemble/model_1/best_copy.ptandlast_copy.ptare distinct checkpoints, not duplicates of the adjacent files.- Class imbalance is roughly 6200:1 neither-to-splice, handled with per-class alpha
weights
[0.1, 1.0, 1.0]and weighted random sampling.