File size: 2,477 Bytes
9597f8d acecf04 9597f8d acecf04 9597f8d acecf04 9597f8d acecf04 9597f8d acecf04 9597f8d acecf04 9597f8d acecf04 9597f8d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | ---
license: cc-by-nc-4.0
library_name: braindecode
tags:
- eeg
- polysomnography
- sleep
- foundation-model
- braindecode
---
# SleepFM — pretrained encoder
Mirror of the official **SleepFM** encoder checkpoint, re-hosted for stable loading from
[Braindecode](https://github.com/braindecode/braindecode).
SleepFM is a multimodal polysomnography (PSG) foundation model introduced in:
> R. Thapa et al., *"A multimodal sleep foundation model for disease prediction,"*
> **Nature Medicine** (2026). https://doi.org/10.1038/s41591-025-04133-4
The downstream sleep stager lives in a separate repository,
[`braindecode/SleepFMStager`](https://huggingface.co/braindecode/SleepFMStager),
because a Braindecode `config.json` describes exactly one architecture.
## Files
| File | Description |
|------|-------------|
| `model.safetensors` | The encoder, with the parameter names of `braindecode.models.SleepFM` |
| `config.json` | Architecture of the checkpoint, read by `from_pretrained()` |
| `model_base/best.pt` | The upstream artifact, byte-for-byte, kept for provenance |
| `model_sleep_staging/best.pth` | The upstream staging artifact, byte-for-byte (see `SleepFMStager`) |
`model.safetensors` holds the **same tensors** as `model_base/best.pt`; only the keys were
rewritten (the `module.` prefix of the distributed training run stripped, and
`positional_encoding.pe` renamed) so that the library needs no remapping code at load
time. Loading either way gives bit-identical outputs.
Note that the released encoder is contrastive and carries **no classification head**:
`final_layer` is randomly initialised and must be fine-tuned.
## Usage
```python
from braindecode.models import SleepFM
# Defaults to this repository.
model = SleepFM.from_pretrained(n_chans=4, n_outputs=5, n_times=3840, sfreq=128)
model.eval()
```
Input must be sampled at **128 Hz**; the reference `patch_size=640` is a 5-second patch at
that rate. A channel mask of shape `(batch, n_chans)` marks missing channels with `True`.
## License & attribution
- **License: Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0).**
- Copyright (c) 2025 Rahul Thapa.
- Upstream source: https://github.com/zou-group/sleepfm-clinical
These weights are **not** covered by Braindecode's BSD-3 license and inherit the
upstream **noncommercial** terms. Re-hosted for reproducibility and stable
availability only; attribution and the CC BY-NC 4.0 restriction are preserved.
|