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.