Skip to content

Commit 45bff4f

Browse files
authored
Pin dataset HF revisions for reproducibility (#37)
* Rename EUSIPCO paper * Allow passing the HF revision for datasets loading * uv lock * set dataset revisions * CHANGELOG * Update braindecode
1 parent 0c3c38f commit 45bff4f

6 files changed

Lines changed: 41 additions & 10 deletions

File tree

File renamed without changes.

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## [Unreleased]
99

1010
### Added
11+
- Add a required `revision` field on `Dataset` (forwarded to `BaseConcatDataset.pull_from_hub`) and pin every default dataset config to its current HuggingFace commit SHA for reproducibility ([#37](https://github.com/braindecode/OpenEEGBench/pull/37)).
1112
- Allow custom normalization methods by subclassing `Normalization`, now based on `exca.helpers.DiscriminatedModel`. Builtin subclasses pin their pre-existing `kind` value to preserve cached experiment UIDs ([#35](https://github.com/braindecode/OpenEEGBench/pull/35)).
1213
- Add `training_required_parameters` field on `_BackboneBase` for top-level `nn.Parameter` names that must remain trainable (e.g. Labram's `temporal_embedding`). Distinct from `training_required_modules`, which only accepts `nn.Module` names. Finetuning methods declare compatibility via the `supports_training_required_parameters` class variable; `IA3` and `OFT` opt out. `LoRA`/`AdaLoRA`/`DoRA` forward the list to PEFT's `target_parameters`; `Frozen`/`TwoStages` extend their unfreeze list ([#25](https://github.com/braindecode/OpenEEGBench/pull/25)).
1314

15+
### Changed
16+
- X
17+
18+
### Fixed
19+
- X
20+
21+
1422
## [0.4.0] - 2026-05-07
1523

1624
### Added

open_eeg_bench/dataset.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,12 @@ class Dataset(BaseModel):
101101
hf_id: str = Field(
102102
description="HuggingFace Hub dataset ID, e.g. 'braindecode/bcic2a'."
103103
)
104+
revision: str = Field(
105+
description=(
106+
"HuggingFace Hub revision (commit hash, branch, or tag) to pin "
107+
"the dataset to a specific version."
108+
),
109+
)
104110
n_classes: int | None = Field(
105111
description="Number of classes (None for regression)."
106112
)
@@ -113,15 +119,19 @@ class Dataset(BaseModel):
113119
),
114120
)
115121
preload: bool = False
116-
122+
117123
_exclude_from_cls_uid: ClassVar[tuple[str, ...]] = ("preload",)
118124

119125
def load(self):
120126
"""Pull windowed dataset from HuggingFace Hub."""
121127
from braindecode.datasets import BaseConcatDataset
122128

123-
log.info("Loading dataset from HuggingFace Hub: %s", self.hf_id)
124-
return BaseConcatDataset.pull_from_hub(self.hf_id, preload=self.preload)
129+
log.info(
130+
"Loading dataset from HuggingFace Hub: %s@%s", self.hf_id, self.revision
131+
)
132+
return BaseConcatDataset.pull_from_hub(
133+
self.hf_id, preload=self.preload, revision=self.revision
134+
)
125135

126136
def setup(self, normalization):
127137
"""Load dataset, apply normalization, split, and return sets.

open_eeg_bench/default_configs/datasets.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def arithmetic_zyma2019(**overrides) -> Dataset:
1616
"""Mental arithmetic vs. rest — 2 classes, 36 subjects."""
1717
defaults = dict(
1818
hf_id="braindecode/arithmetic_zyma2019",
19+
revision="8359206e7e1b3d1f068033348e291d6677be1920",
1920
n_classes=2,
2021
montage_name="standard_1005",
2122
splitter=PredefinedSplitter(
@@ -33,6 +34,7 @@ def bcic2a(**overrides) -> Dataset:
3334
"""BCI Competition IV 2a — 4-class motor imagery, 9 subjects."""
3435
defaults = dict(
3536
hf_id="braindecode/bcic2a",
37+
revision="3585206f74463e787688a0f4afd12605c9be700c",
3638
n_classes=4,
3739
splitter=PredefinedSplitter(
3840
metadata_key="subject",
@@ -49,6 +51,7 @@ def bcic2020_3(**overrides) -> Dataset:
4951
"""BCI Competition 2020-3 — 5-class imagined speech."""
5052
defaults = dict(
5153
hf_id="braindecode/bcic2020-3",
54+
revision="8e2addefed44280be79b0c29bb09cc4c723cf18d",
5255
n_classes=5,
5356
montage_name="standard_1005",
5457
splitter=PredefinedSplitter(
@@ -66,6 +69,7 @@ def physionet(**overrides) -> Dataset:
6669
"""PhysioNet Motor Imagery — 4 classes, 109 subjects."""
6770
defaults = dict(
6871
hf_id="braindecode/physionet",
72+
revision="3c9cf8b242ca49550a43028bde3c6db3f1353b51",
6973
n_classes=4,
7074
splitter=PredefinedSplitter(
7175
metadata_key="subject",
@@ -82,6 +86,7 @@ def chbmit(**overrides) -> Dataset:
8286
"""CHB-MIT seizure detection — 2 classes, 23 subjects."""
8387
defaults = dict(
8488
hf_id="braindecode/chbmit",
89+
revision="3c7fc5537fb22686b2aafa8eb1a30d292c4464ab",
8590
n_classes=2,
8691
montage_name="standard_1005",
8792
splitter=PredefinedSplitter(
@@ -99,6 +104,7 @@ def faced(**overrides) -> Dataset:
99104
"""FACED emotion recognition — 9 classes, 123 subjects."""
100105
defaults = dict(
101106
hf_id="braindecode/faced",
107+
revision="18c73355fc71c055e92828384da85bb49bc6e3c0",
102108
n_classes=9,
103109
montage_name="standard_1005",
104110
splitter=PredefinedSplitter(
@@ -116,6 +122,7 @@ def isruc_sleep(**overrides) -> Dataset:
116122
"""ISRUC sleep staging — 5 classes, ~60 usable subjects."""
117123
defaults = dict(
118124
hf_id="braindecode/isruc-sleep",
125+
revision="beda68130bc3a84c8e6abf11c527d7c5ff941616",
119126
n_classes=5,
120127
montage_name="standard_1005",
121128
splitter=PredefinedSplitter(
@@ -143,6 +150,7 @@ def mdd_mumtaz2016(**overrides) -> Dataset:
143150
"""MDD detection (Mumtaz 2016) — 2 classes."""
144151
defaults = dict(
145152
hf_id="braindecode/mdd_mumtaz2016",
153+
revision="53cd9de1af5f09209d8a0f4fe20aa325c6a5fedb",
146154
n_classes=2,
147155
montage_name="standard_1005",
148156
splitter=PredefinedSplitter(
@@ -174,6 +182,7 @@ def seed_v(**overrides) -> Dataset:
174182
"""SEED-V emotion recognition — 5 classes, session-based split."""
175183
defaults = dict(
176184
hf_id="braindecode/seed-v",
185+
revision="b3498f4b045ade3093ecc646e2162057309479d3",
177186
n_classes=5,
178187
splitter=PredefinedSplitter(
179188
metadata_key="session",
@@ -190,6 +199,7 @@ def seed_vig(**overrides) -> Dataset:
190199
"""SEED-VIG vigilance regression — continuous perclos target."""
191200
defaults = dict(
192201
hf_id="braindecode/seed-vig",
202+
revision="896f1ad81375dc1aaf53f6e73d9d0c829be7bb40",
193203
n_classes=None, # regression
194204
splitter=PredefinedSplitter(
195205
metadata_key="subject",
@@ -206,6 +216,7 @@ def tuab(**overrides) -> Dataset:
206216
"""TUH Abnormal EEG — 2 classes (normal/abnormal), predefined train/eval split."""
207217
defaults = dict(
208218
hf_id="braindecode/tuab",
219+
revision="7afcc5a00b50cac0f7e6e7f36928f7ccd8b91744",
209220
n_classes=2,
210221
splitter=PredefinedSplitter(
211222
metadata_key="train",
@@ -222,6 +233,7 @@ def tuev(**overrides) -> Dataset:
222233
"""TUH EEG Events — 6 classes, predefined train/eval split."""
223234
defaults = dict(
224235
hf_id="braindecode/tuev",
236+
revision="a16d2dcaf354a4c1fa1d31e1e591294802939868",
225237
n_classes=6,
226238
splitter=PredefinedSplitter(
227239
metadata_key="split",

pyproject.toml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ classifiers = [
2121
]
2222

2323
dependencies = [
24-
"braindecode[hub]>=1.4.0",
24+
"braindecode[hub]>=1.6.1.dev184162698",
2525
"exca>=0.5.10",
2626
"peft>=0.14.0",
2727
"pydantic>=2.0",
@@ -43,9 +43,6 @@ Changelog = "https://github.com/braindecode/OpenEEGBench/blob/master/CHANGELOG.m
4343
benchopt = ["benchopt>=1.9"]
4444
dev = ["pytest", "pytest-cov"]
4545

46-
[tool.uv.sources]
47-
braindecode = { git = "https://github.com/braindecode/braindecode.git" }
48-
4946
[tool.setuptools.packages.find]
5047
where = ["."]
5148
include = ["open_eeg_bench*"]

uv.lock

Lines changed: 7 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)