Note
Go to the end to download the full example code.
Uploading and downloading datasets to Hugging Face Hub#
This example demonstrates how to upload and download EEG datasets to/from the Hugging Face Hub using braindecode.
The Hub integration supports three dataset types:
WindowsDataset - Epoched data (mne.Epochs-based)
EEGWindowsDataset - Continuous raw data with windowing metadata
RawDataset - Continuous raw data without windowing
The Hub integration allows you to:
Share datasets with the research community
Version control your datasets with git-like versioning
Collaborate on dataset curation and preprocessing
Access datasets from anywhere with automatic caching
We’ll use the braindecode.datasets.BNCI2014_001 dataset as an example.
# Authors: Kuntal Kokate
#
# License: BSD (3-clause)
import os
from huggingface_hub import login
from braindecode.datasets import BNCI2014_001, BaseConcatDataset
from braindecode.preprocessing import (
create_windows_from_events,
)
# Login to Hugging Face Hub using token from environment variable
hf_token = os.environ.get("HUGGING_FACE_TOKEN")
if hf_token:
login(token=hf_token)
else:
print("Warning: HUGGING_FACE_TOKEN not set. Hub uploads will fail.")
Load and prepare datasets#
We’ll demonstrate all three supported dataset types.
print("Loading BNCI2014_001 dataset...")
# Load only subject 1 for this example
dataset = BNCI2014_001(subject_ids=[1])
print(f" Number of recordings: {len(dataset.datasets)}")
print(f" Channels: {len(dataset.datasets[0].raw.ch_names)}")
print(f" Sampling frequency: {dataset.datasets[0].raw.info['sfreq']} Hz")
Loading BNCI2014_001 dataset...
Number of recordings: 12
Channels: 26
Sampling frequency: 250.0 Hz
Example 1: WindowsDataset (Epoched data)#
Create epoched data using mne.Epochs (use_mne_epochs=True)
print("\n1. Creating WindowsDataset (epoched data)...")
windows_dataset = create_windows_from_events(
concat_ds=BaseConcatDataset([dataset.datasets[0]]),
trial_start_offset_samples=0,
trial_stop_offset_samples=0,
use_mne_epochs=True, # Creates WindowsDataset with mne.Epochs
)
print(f" Total windows: {len(windows_dataset)}")
print(" Dataset type: WindowsDataset (epoched)")
1. Creating WindowsDataset (epoched data)...
Using data from preloaded Raw for 48 events and 1000 original time points ...
0 bad epochs dropped
Total windows: 48
Dataset type: WindowsDataset (epoched)
Example 2: EEGWindowsDataset (Continuous with windowing)#
Create continuous raw data with windowing metadata (use_mne_epochs=False)
print("\n2. Creating EEGWindowsDataset (continuous with windowing)...")
eegwindows_dataset = create_windows_from_events(
concat_ds=BaseConcatDataset([dataset.datasets[0]]),
trial_start_offset_samples=0,
trial_stop_offset_samples=0,
use_mne_epochs=False, # Creates EEGWindowsDataset with continuous raw
)
print(f" Total windows: {len(eegwindows_dataset)}")
print(" Dataset type: EEGWindowsDataset (continuous)")
2. Creating EEGWindowsDataset (continuous with windowing)...
Total windows: 48
Dataset type: EEGWindowsDataset (continuous)
Example 3: RawDataset (Continuous without windowing)#
Use the original raw data without any windowing
print("\n3. Using RawDataset (continuous without windowing)...")
raw_dataset = BaseConcatDataset([dataset.datasets[0]])
print(f" Number of recordings: {len(raw_dataset.datasets)}")
print(" Dataset type: RawDataset (continuous, no windows)")
3. Using RawDataset (continuous without windowing)...
Number of recordings: 1
Dataset type: RawDataset (continuous, no windows)
Upload datasets to Hugging Face Hub#
To upload a dataset, you need to:
Create a Hugging Face account at https://huggingface.co
Login using:
huggingface-cli loginChoose a repository name (e.g., “username/dataset-name”)
Note: This example shows the code but doesn’t actually upload. Uncomment the code below to perform an actual upload.
print("\n" + "=" * 70)
print("UPLOADING TO HUGGING FACE HUB")
print("=" * 70)
# Skip Hub operations if no token is available (e.g., during docs build)
if not hf_token:
print("\n⚠️ Skipping Hub upload examples (no HUGGING_FACE_TOKEN set)")
print("To run this example with actual uploads, set HUGGING_FACE_TOKEN")
else:
# Example 1: Upload WindowsDataset
# ---------------------------------
repo_id_windows = "braindecode/example_dataset-windows"
print(f"\nUploading WindowsDataset to {repo_id_windows}...")
url = windows_dataset.push_to_hub(
repo_id=repo_id_windows,
commit_message="Upload BNCI2014_001 WindowsDataset (epoched)",
private=False,
)
print(f"✅ Uploaded to {url}!")
# Example 2: Upload EEGWindowsDataset
# ------------------------------------
repo_id_eegwindows = "braindecode/example_dataset-eegwindows"
print(f"\nUploading EEGWindowsDataset to {repo_id_eegwindows}...")
url = eegwindows_dataset.push_to_hub(
repo_id=repo_id_eegwindows,
commit_message="Upload BNCI2014_001 EEGWindowsDataset (continuous)",
private=False,
)
print(f"✅ Uploaded to {url}!")
# Example 3: Upload RawDataset
# -----------------------------
repo_id_raw = "braindecode/example_dataset-raw"
print(f"\nUploading RawDataset to {repo_id_raw}...")
url = raw_dataset.push_to_hub(
repo_id=repo_id_raw,
commit_message="Upload BNCI2014_001 RawDataset",
private=False,
)
print(f"✅ Uploaded to {url}!")
print("""
The example above demonstrates uploading to the Hugging Face Hub.
All datasets are converted to Zarr format (optimized for fast loading)
and uploaded with auto-generated dataset cards.
For your own datasets, replace the repo_id with your Hugging Face username.
""")
======================================================================
UPLOADING TO HUGGING FACE HUB
======================================================================
Uploading WindowsDataset to braindecode/example_dataset-windows...
Using data from preloaded Raw for 48 events and 1000 original time points ...
✅ Uploaded to https://huggingface.co/datasets/braindecode/example_dataset-windows/commit/4588da47cf3c18a841b9ff152dc1453ca81c998e!
Uploading EEGWindowsDataset to braindecode/example_dataset-eegwindows...
Processing Files (0 / 0) : | | 0.00B / 0.00B
New Data Upload : | | 0.00B / 0.00B
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
Processing Files (9 / 9) : 90%|████████▉ | 4.29MB / 4.78MB, 21.5MB/s
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/7: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/7: 100%|██████████| 492kB / 492kB
Processing Files (10 / 10) : 100%|██████████| 4.78MB / 4.78MB, 724kB/s
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/7: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/7: 100%|██████████| 492kB / 492kB
Processing Files (10 / 10) : 100%|██████████| 4.78MB / 4.78MB, 703kB/s
New Data Upload : | | 0.00B / 0.00B, 0.00B/s
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/7: 100%|██████████| 492kB / 492kB
✅ Uploaded to https://huggingface.co/datasets/braindecode/example_dataset-eegwindows/commit/80a155f01b21030828e4965e179e209e4992593a!
Uploading RawDataset to braindecode/example_dataset-raw...
Processing Files (0 / 0) : | | 0.00B / 0.00B
New Data Upload : | | 0.00B / 0.00B
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/7: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/7: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
Processing Files (10 / 10) : 100%|██████████| 4.78MB / 4.78MB, ???B/s
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/7: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
Processing Files (10 / 10) : 100%|██████████| 4.78MB / 4.78MB, 0.00B/s
New Data Upload : | | 0.00B / 0.00B, 0.00B/s
...rr/recording_0/data/c/0/6: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/2: 100%|██████████| 488kB / 488kB
...rr/recording_0/data/c/0/0: 100%|██████████| 486kB / 486kB
...rr/recording_0/data/c/0/4: 100%|██████████| 497kB / 497kB
...rr/recording_0/data/c/0/9: 100%|██████████| 357kB / 357kB
...rr/recording_0/data/c/0/7: 100%|██████████| 492kB / 492kB
...rr/recording_0/data/c/0/3: 100%|██████████| 490kB / 490kB
...rr/recording_0/data/c/0/5: 100%|██████████| 491kB / 491kB
...rr/recording_0/data/c/0/1: 100%|██████████| 487kB / 487kB
...rr/recording_0/data/c/0/8: 100%|██████████| 496kB / 496kB
✅ Uploaded to https://huggingface.co/datasets/braindecode/example_dataset-raw/commit/58f80b50261ca4cf9b4936bfe3ac4e3c655db3c9!
The example above demonstrates uploading to the Hugging Face Hub.
All datasets are converted to Zarr format (optimized for fast loading)
and uploaded with auto-generated dataset cards.
For your own datasets, replace the repo_id with your Hugging Face username.
Zarr Format#
Datasets are uploaded in Zarr format, which provides:
Fastest random access (0.010 ms - critical for PyTorch training)
Excellent compression with blosc
Cloud-native, chunked storage
Ideal for datasets of all sizes
Based on comprehensive benchmarking with 1000 subjects
The format parameters (compression, compression_level) are optimized by default but can be customized if needed.
Download datasets from Hugging Face Hub#
Loading datasets from the Hub is simple and automatic!
print("\n" + "=" * 70)
print("DOWNLOADING FROM HUGGING FACE HUB")
print("=" * 70)
# Skip Hub downloads if no token (docs build)
if not hf_token:
print("\n⚠️ Skipping Hub download examples (no HUGGING_FACE_TOKEN set)")
print("To run this example with actual downloads, set HUGGING_FACE_TOKEN")
else:
# Example 1: Download WindowsDataset
# -----------------------------------
public_repo_windows = "braindecode/example_dataset-windows"
print(f"\nDownloading WindowsDataset from {public_repo_windows}...")
loaded_windows = BaseConcatDataset.pull_from_hub(
public_repo_windows,
preload=True, # Load into memory (False for lazy loading)
)
print("✅ Loaded WindowsDataset!")
print(f" Number of windows: {len(loaded_windows)}")
# Example 2: Download EEGWindowsDataset
# --------------------------------------
public_repo_eeg = "braindecode/example_dataset-eegwindows"
print(f"\nDownloading EEGWindowsDataset from {public_repo_eeg}...")
loaded_eeg = BaseConcatDataset.pull_from_hub(
public_repo_eeg,
preload=True,
)
print("✅ Loaded EEGWindowsDataset!")
print(f" Number of windows: {len(loaded_eeg)}")
# Example 3: Download RawDataset
# -------------------------------
public_repo_raw = "braindecode/example_dataset-raw"
print(f"\nDownloading RawDataset from {public_repo_raw}...")
loaded_raw = BaseConcatDataset.pull_from_hub(
public_repo_raw,
preload=True,
)
print("✅ Loaded RawDataset!")
print(f" Number of recordings: {len(loaded_raw.datasets)}")
print("""
The example above demonstrates downloading datasets from the Hub.
Datasets are automatically downloaded and cached locally.
Subsequent loads use the cache for faster access.
""")
======================================================================
DOWNLOADING FROM HUGGING FACE HUB
======================================================================
Downloading WindowsDataset from braindecode/example_dataset-windows...
Fetching 107 files: 0%| | 0/107 [00:00<?, ?it/s]
Fetching 107 files: 1%| | 1/107 [00:00<00:26, 3.96it/s]
Fetching 107 files: 8%|▊ | 9/107 [00:00<00:04, 20.87it/s]
Fetching 107 files: 16%|█▌ | 17/107 [00:00<00:03, 25.36it/s]
Fetching 107 files: 23%|██▎ | 25/107 [00:01<00:02, 28.23it/s]
Fetching 107 files: 31%|███ | 33/107 [00:01<00:02, 29.35it/s]
Fetching 107 files: 38%|███▊ | 41/107 [00:01<00:02, 29.80it/s]
Fetching 107 files: 45%|████▍ | 48/107 [00:01<00:02, 29.47it/s]
Fetching 107 files: 52%|█████▏ | 56/107 [00:02<00:01, 30.07it/s]
Fetching 107 files: 60%|█████▉ | 64/107 [00:02<00:01, 30.12it/s]
Fetching 107 files: 67%|██████▋ | 72/107 [00:02<00:01, 27.10it/s]
Fetching 107 files: 75%|███████▍ | 80/107 [00:02<00:00, 32.04it/s]
Fetching 107 files: 80%|████████ | 86/107 [00:02<00:00, 36.17it/s]
Fetching 107 files: 85%|████████▌ | 91/107 [00:03<00:00, 34.08it/s]
Fetching 107 files: 90%|████████▉ | 96/107 [00:03<00:00, 30.14it/s]
Fetching 107 files: 93%|█████████▎| 100/107 [00:03<00:00, 31.82it/s]
Fetching 107 files: 97%|█████████▋| 104/107 [00:03<00:00, 30.01it/s]
Fetching 107 files: 100%|██████████| 107/107 [00:03<00:00, 29.93it/s]
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/zarr/core/group.py:579: ZarrUserWarning: Both zarr.json (Zarr format 3) and .zgroup (Zarr format 2) metadata objects exist at file:///home/runner/.cache/huggingface/hub/datasets--braindecode--example_dataset-windows/snapshots/4588da47cf3c18a841b9ff152dc1453ca81c998e/dataset.zarr. Zarr format 3 will be used.
warnings.warn(msg, category=ZarrUserWarning, stacklevel=1)
Adding metadata with 4 columns
48 matching events found
No baseline correction applied
0 projection items activated
✅ Loaded WindowsDataset!
Number of windows: 48
Downloading EEGWindowsDataset from braindecode/example_dataset-eegwindows...
Fetching 31 files: 0%| | 0/31 [00:00<?, ?it/s]
Fetching 31 files: 3%|▎ | 1/31 [00:00<00:11, 2.59it/s]
Fetching 31 files: 26%|██▌ | 8/31 [00:00<00:01, 19.96it/s]
Fetching 31 files: 39%|███▊ | 12/31 [00:00<00:01, 17.12it/s]
Fetching 31 files: 55%|█████▍ | 17/31 [00:00<00:00, 22.26it/s]
Fetching 31 files: 71%|███████ | 22/31 [00:01<00:00, 27.79it/s]
Fetching 31 files: 84%|████████▍ | 26/31 [00:01<00:00, 22.08it/s]
Fetching 31 files: 100%|██████████| 31/31 [00:01<00:00, 22.76it/s]
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/zarr/core/group.py:579: ZarrUserWarning: Both zarr.json (Zarr format 3) and .zgroup (Zarr format 2) metadata objects exist at file:///home/runner/.cache/huggingface/hub/datasets--braindecode--example_dataset-eegwindows/snapshots/80a155f01b21030828e4965e179e209e4992593a/dataset.zarr. Zarr format 3 will be used.
warnings.warn(msg, category=ZarrUserWarning, stacklevel=1)
Creating RawArray with float64 data, n_channels=26, n_times=96735
Range : 0 ... 96734 = 0.000 ... 386.936 secs
Ready.
✅ Loaded EEGWindowsDataset!
Number of windows: 48
Downloading RawDataset from braindecode/example_dataset-raw...
Fetching 31 files: 0%| | 0/31 [00:00<?, ?it/s]
Fetching 31 files: 3%|▎ | 1/31 [00:00<00:08, 3.62it/s]
Fetching 31 files: 26%|██▌ | 8/31 [00:00<00:01, 15.12it/s]
Fetching 31 files: 52%|█████▏ | 16/31 [00:00<00:00, 18.11it/s]
Fetching 31 files: 77%|███████▋ | 24/31 [00:01<00:00, 26.25it/s]
Fetching 31 files: 97%|█████████▋| 30/31 [00:01<00:00, 31.29it/s]
Fetching 31 files: 100%|██████████| 31/31 [00:01<00:00, 24.77it/s]
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/zarr/core/group.py:579: ZarrUserWarning: Both zarr.json (Zarr format 3) and .zgroup (Zarr format 2) metadata objects exist at file:///home/runner/.cache/huggingface/hub/datasets--braindecode--example_dataset-raw/snapshots/58f80b50261ca4cf9b4936bfe3ac4e3c655db3c9/dataset.zarr. Zarr format 3 will be used.
warnings.warn(msg, category=ZarrUserWarning, stacklevel=1)
Creating RawArray with float64 data, n_channels=26, n_times=96735
Range : 0 ... 96734 = 0.000 ... 386.936 secs
Ready.
✅ Loaded RawDataset!
Number of recordings: 1
The example above demonstrates downloading datasets from the Hub.
Datasets are automatically downloaded and cached locally.
Subsequent loads use the cache for faster access.
Using datasets with PyTorch DataLoader#
Datasets loaded from the Hub work seamlessly with PyTorch.
print("\n" + "=" * 70)
print("USING WITH PYTORCH DATALOADER")
print("=" * 70)
from torch.utils.data import DataLoader
# Create DataLoader
train_loader = DataLoader(
windows_dataset,
batch_size=32,
shuffle=True,
num_workers=0, # Set to > 0 for parallel loading
)
print("\nDataLoader created:")
print(" Batch size: 32")
print(f" Total batches: {len(train_loader)}")
# Iterate over a few batches
print("\n Sample batches:")
for i, batch_data in enumerate(train_loader):
if i >= 3: # Show only 3 batches
break
# Handle both 2-tuple (X, y) and 3-tuple (X, y, inds) returns
if len(batch_data) == 3:
X_batch, y_batch, _ = batch_data
else:
X_batch, y_batch = batch_data
print(
f" Batch {i + 1}: X shape={tuple(X_batch.shape)}, "
f"y shape={tuple(y_batch.shape)}"
)
print("""
This works the same way for datasets loaded from the Hub!
The Hub integration is fully compatible with PyTorch's training pipeline.
""")
======================================================================
USING WITH PYTORCH DATALOADER
======================================================================
DataLoader created:
Batch size: 32
Total batches: 2
Sample batches:
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Batch 1: X shape=(32, 26, 1000), y shape=(32,)
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Batch 2: X shape=(16, 26, 1000), y shape=(16,)
This works the same way for datasets loaded from the Hub!
The Hub integration is fully compatible with PyTorch's training pipeline.
Advanced: Version control and collaboration#
The Hub provides powerful features for dataset management:
Versioning
Every upload creates a new commit, allowing you to track changes:
# Upload updated version
dataset.push_to_hub(
repo_id="username/dataset-name",
commit_message="Fixed label for subject 5"
)
Private datasets
For sensitive data or work-in-progress:
dataset.push_to_hub(
repo_id="username/private-dataset",
private=True
)
Pull requests
Propose changes without directly modifying the dataset:
dataset.push_to_hub(
repo_id="username/dataset-name",
create_pr=True,
commit_message="Propose additional preprocessing"
)
Best practices#
When sharing datasets on the Hub:
Include good documentation - The dataset card (README.md) is auto- generated but you can edit it on the Hub to add details about:
Data collection methodology
Preprocessing steps applied
Known issues or limitations
Citation information
Optimize compression if needed - The default blosc compression (level 5) provides an optimal balance. For very large datasets, experiment with compression_level parameter (0-9) to find the best trade-off between size and speed for your use case.
Test before sharing - Always test that your uploaded dataset can be downloaded and used correctly:
# Upload dataset.push_to_hub("braindecode/example_dataset") # Test download test_dataset = BaseConcatDataset.pull_from_hub("braindecode/example_dataset") assert len(test_dataset) == len(dataset)
Consider privacy - Ensure you have permission to share the data and that personal information has been properly anonymized.
print("\n" + "=" * 70)
print("SUMMARY")
print("=" * 70)
print("""
Hugging Face Hub integration supports three dataset types:
✓ WindowsDataset - Epoched data (mne.Epochs)
✓ EEGWindowsDataset - Continuous with windowing metadata
✓ RawDataset - Continuous without windowing
Benefits:
✓ Share datasets with the research community
✓ Version control with git-like versioning
✓ Collaborate on dataset curation
✓ Access datasets from anywhere
✓ Automatic caching for faster repeated loads
✓ Optimized Zarr format for fast training
For more information:
- Hugging Face Hub: https://huggingface.co
- Braindecode docs: https://braindecode.org
- Hub docs: https://huggingface.co/docs/hub
""")
======================================================================
SUMMARY
======================================================================
Hugging Face Hub integration supports three dataset types:
✓ WindowsDataset - Epoched data (mne.Epochs)
✓ EEGWindowsDataset - Continuous with windowing metadata
✓ RawDataset - Continuous without windowing
Benefits:
✓ Share datasets with the research community
✓ Version control with git-like versioning
✓ Collaborate on dataset curation
✓ Access datasets from anywhere
✓ Automatic caching for faster repeated loads
✓ Optimized Zarr format for fast training
For more information:
- Hugging Face Hub: https://huggingface.co
- Braindecode docs: https://braindecode.org
- Hub docs: https://huggingface.co/docs/hub
Total running time of the script: (0 minutes 23.296 seconds)
Estimated memory usage: 1373 MB