LTAF ECG Beat Classifier (N / A / V)
Frozen Chronos-2 (amazon/chronos-2) multivariate encoder + MLP head,
trained on the PhysioNet Long-Term Atrial Fibrillation (LTAF) database
for per-beat classification.
Classes
| Code | Expansion |
|---|---|
| N | Normal sinus-origin beat |
| A | Atrial premature contraction (APC / PAC / SVE) |
| V | Ventricular premature contraction (PVC / VE) |
Q (unclassifiable / paced, ~89 / 9 M in the LTAF subset) is dropped.
Input
(B, 2, 256)โ 2-lead ECG at 128 Hz, 2-second window centered on the R-peak sample- Per-channel z-scored
- LTAF leads:
ECG1,ECG2
Checkpoint details
| Field | Value |
|---|---|
num_classes |
3 |
class_names |
["N", "A", "V"] |
window_samples |
256 (2 s @ 128 Hz) |
n_channels |
2 |
chronos_model_id |
amazon/chronos-2 |
freeze_encoder |
true (only the head's 395,267 params were trained) |
| Head | 2-layer MLP: Linear(1024, 512) โ ReLU โ Dropout(0.3) โ Linear(512, 3) |
Usage
import torch
from huggingface_hub import hf_hub_download
from src.models.ts_llm.ecg_classifier import EcgRhythmClassifier
path = hf_hub_download("rmxjck/ltaf-ecg-beats-classifier", "best_classifier.pt")
model = EcgRhythmClassifier.load(path, device="cuda")
# x: (B, 2, 256) float32 at 128 Hz, z-scored, centered on R-peak
logits = model(x)
pred = logits.argmax(-1) # 0=N, 1=A, 2=V
Training
Produced by scripts/train_ecg_classifier.py in
rmxjck/TSLM-Arena on the LTAF-Haystack split
(67 train / 8 val / 9 test records, deterministic seed 42). N beats are
subsampled per epoch to negative_k ร n_nonN (default 2.0) to balance
the 97 % N / 1.7 % A / 1.5 % V class distribution.
.venv/bin/python3 scripts/train_ecg_classifier.py \
--label-class beats --epochs 30 --batch-size 128
Not for clinical use
Research artifact only. Not FDA-cleared. Not suitable for triage, diagnosis, or any patient-facing application.
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐ Ask for provider support