Braindecode 1.8.1.dev180519461__tar.gz → 1.8.1.dev180667301__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/NOTICE.txt +2 -11
- {braindecode-1.8.1.dev180519461/braindecode.egg-info → braindecode-1.8.1.dev180667301}/PKG-INFO +1 -1
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/__init__.py +0 -11
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/base.py +0 -16
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/bendr.py +12 -14
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/cbramod.py +9 -36
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/deep4.py +4 -12
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegdino.py +1 -4
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/labram.py +9 -42
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/luna.py +3 -23
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/shallow_fbcsp.py +8 -15
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/signal_jepa.py +1 -4
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/summary.csv +0 -6
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/util.py +0 -114
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/zuna.py +3 -3
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/__init__.py +0 -6
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/convolution.py +9 -10
- braindecode-1.8.1.dev180667301/braindecode/version.py +1 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301/braindecode.egg-info}/PKG-INFO +1 -1
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode.egg-info/SOURCES.txt +0 -7
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/api.rst +0 -12
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/whats_new.rst +0 -101
- braindecode-1.8.1.dev180519461/braindecode/models/brainomni.py +0 -1905
- braindecode-1.8.1.dev180519461/braindecode/models/csbrain.py +0 -758
- braindecode-1.8.1.dev180519461/braindecode/models/mapa.py +0 -851
- braindecode-1.8.1.dev180519461/braindecode/models/neurorvq.py +0 -648
- braindecode-1.8.1.dev180519461/braindecode/models/seizure_transformer.py +0 -407
- braindecode-1.8.1.dev180519461/braindecode/modules/channel_tokenizer.py +0 -215
- braindecode-1.8.1.dev180519461/braindecode/modules/quantization.py +0 -402
- braindecode-1.8.1.dev180519461/braindecode/version.py +0 -1
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/LICENSE.txt +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/MANIFEST.in +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/README.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/__init__.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/augmentation/__init__.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/augmentation/base.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/augmentation/functional.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/augmentation/transforms.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/classifier.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/__init__.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/_notebook_viewer.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/base.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/bbci.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/bcicomp.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/bids/__init__.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/bids/datasets.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/bids/format.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/bids/hub.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/bids/hub_format.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/bids/hub_io.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/bids/hub_validation.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/bids/iterable.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/chb_mit.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/collate.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/mne.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/moabb.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/nmt.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/registry.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/siena.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/sleep_physionet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/tuh.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/utils.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datasets/xy.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datautil/__init__.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datautil/channel_utils.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datautil/hub_formats.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datautil/serialization.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/datautil/util.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/eegneuralnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/functional/__init__.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/functional/_real_dft.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/functional/functions.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/functional/initialization.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/atcnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/attentionbasenet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/attn_sleep.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/barista.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/biot.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/brainbert.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/brainmodule.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/brant.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/codebrain.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/config.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/contrawr.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/ctnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/dance.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/deepsleepnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/dgcnn.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/diver1.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegconformer.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eeginception_erp.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eeginception_mi.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegitnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegminer.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegnex.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegpt.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegsimpleconv.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegsym.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegtcnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/emg2qwerty.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/fbcnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/fblightconvnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/fbmsnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/hybrid.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/ifnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/interpolated.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/medformer.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/meta_neuromotor.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/mirepnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/mscformer.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/msvtnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/mvpformer.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/neuropose.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/patchedtransformer.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/popt.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/reve.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/sccnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/sensingdynamics.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/sinc_shallow.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/sparcnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/sstdpn.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/steegformer.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/syncnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/tcformer.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/tcn.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/tidnet.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/tsinception.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/usleep.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/vemg2pose.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/activation.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/attention.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/blocks.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/dance_modules.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/filter.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/interpolation.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/layers.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/linear.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/parametrization.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/popt_modules.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/stats.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/util.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/modules/wrapper.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/preprocessing/__init__.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/preprocessing/mne_preprocess.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/preprocessing/preprocess.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/preprocessing/util.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/preprocessing/windowers.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/regressor.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/samplers/__init__.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/samplers/base.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/samplers/ssl.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/training/__init__.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/training/callbacks.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/training/losses.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/training/scoring.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/util.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/visualization/__init__.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/visualization/activations.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/visualization/attribution.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/visualization/confusion_matrices.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/visualization/frequency.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/visualization/metrics.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/visualization/sanity.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/visualization/topology.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode.egg-info/dependency_links.txt +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode.egg-info/requires.txt +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode.egg-info/top_level.txt +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/Makefile +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/_templates/autosummary/class.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/_templates/autosummary/function.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/agent_docs.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/cite.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/conf.py +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/help.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/index.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/install/install.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/install/install_pip.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/install/install_source.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/categorization/attention.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/categorization/channel.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/categorization/convolution.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/categorization/filterbank.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/categorization/gnn.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/categorization/interpretable.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/categorization/lbm.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/categorization/recurrent.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/categorization/spd.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/models.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/models_categorization.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/models_table.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/models/models_visualization.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/docs/sg_execution_times.rst +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/pyproject.toml +0 -0
- {braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/setup.cfg +0 -0
|
@@ -14,7 +14,8 @@ The following components are licensed under the Creative Commons Attribution-Non
|
|
|
14
14
|
- `braindecode/models/eegminer.py`
|
|
15
15
|
- `braindecode/models/meta_neuromotor.py`
|
|
16
16
|
- `braindecode/models/brainmodule.py`
|
|
17
|
-
|
|
17
|
+
|
|
18
|
+
As well as class later imported into the `braindecode.models.module` named as GeneralizedGaussianFilter.
|
|
18
19
|
|
|
19
20
|
The `meta_neuromotor.py` file is a derivative of
|
|
20
21
|
`facebookresearch/generic-neuromotor-interface`, released by Meta Platforms,
|
|
@@ -44,15 +45,6 @@ The following components are licensed under the MIT License:
|
|
|
44
45
|
- `braindecode/models/mirepnet.py`
|
|
45
46
|
- `braindecode/models/popt.py`
|
|
46
47
|
- `braindecode/modules/popt_modules.py`
|
|
47
|
-
- `braindecode/models/brainomni.py`
|
|
48
|
-
- `braindecode/modules/quantization.py`
|
|
49
|
-
- `braindecode/models/seizure_transformer.py`
|
|
50
|
-
- `docs/_static/model/seizure_transformer_arch.png`
|
|
51
|
-
|
|
52
|
-
The `brainomni.py` file is a derivative of `OpenTSLab/BrainOmni` (MIT), whose
|
|
53
|
-
SEANet codec derives from Meta's `facebookresearch/encodec` (MIT). The
|
|
54
|
-
`quantization.py` module holds the residual vector quantization derived from
|
|
55
|
-
`lucidrains/vector-quantize-pytorch` (MIT) and the BrainOmni port.
|
|
56
48
|
|
|
57
49
|
### Apache-2.0 Licensed Files
|
|
58
50
|
|
|
@@ -61,7 +53,6 @@ The following components are licensed under the Apache License 2.0:
|
|
|
61
53
|
- `braindecode/models/mvpformer.py`
|
|
62
54
|
- `braindecode/models/zuna.py`
|
|
63
55
|
- `braindecode/models/luna.py`
|
|
64
|
-
- `braindecode/models/mapa.py`
|
|
65
56
|
- `braindecode/models/brant.py`
|
|
66
57
|
- `braindecode/models/diver1.py`
|
|
67
58
|
- `braindecode/models/mscformer.py`
|
{braindecode-1.8.1.dev180519461/braindecode.egg-info → braindecode-1.8.1.dev180667301}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.8.1.
|
|
3
|
+
Version: 1.8.1.dev180667301
|
|
4
4
|
Summary: Deep learning software to decode EEG, ECG or MEG signals
|
|
5
5
|
Author-email: Robin Tibor Schirrmeister <robintibor@gmail.com>, Bruno Aristimunha Pinto <b.aristimunha@gmail.com>, Alexandre Gramfort <agramfort@meta.com>
|
|
6
6
|
Maintainer-email: Alexandre Gramfort <agramfort@meta.com>, Bruno Aristimunha Pinto <b.aristimunha@gmail.com>, Robin Tibor Schirrmeister <robintibor@gmail.com>
|
{braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/__init__.py
RENAMED
|
@@ -9,12 +9,10 @@ from .bendr import BENDR, InterpolatedBENDR
|
|
|
9
9
|
from .biot import BIOT, InterpolatedBIOT
|
|
10
10
|
from .brainbert import BrainBERT
|
|
11
11
|
from .brainmodule import BrainModule
|
|
12
|
-
from .brainomni import BrainOmni, BrainTokenizer
|
|
13
12
|
from .brant import Brant
|
|
14
13
|
from .cbramod import CBraMod
|
|
15
14
|
from .codebrain import CodeBrain
|
|
16
15
|
from .contrawr import ContraWR
|
|
17
|
-
from .csbrain import CSBrain
|
|
18
16
|
from .ctnet import CTNet
|
|
19
17
|
from .dance import DANCE
|
|
20
18
|
from .deep4 import Deep4Net
|
|
@@ -42,7 +40,6 @@ from .ifnet import IFNet
|
|
|
42
40
|
from .interpolated import InterpolatedModel
|
|
43
41
|
from .labram import InterpolatedLaBraM, Labram
|
|
44
42
|
from .luna import LUNA
|
|
45
|
-
from .mapa import MAPA
|
|
46
43
|
from .medformer import MEDFormer
|
|
47
44
|
from .meta_neuromotor import MetaNeuromotorHand
|
|
48
45
|
from .mirepnet import MIRepNet
|
|
@@ -50,12 +47,10 @@ from .mscformer import MSCFormer
|
|
|
50
47
|
from .msvtnet import MSVTNet
|
|
51
48
|
from .mvpformer import MVPFormer
|
|
52
49
|
from .neuropose import NeuroPose
|
|
53
|
-
from .neurorvq import NeuroRVQ
|
|
54
50
|
from .patchedtransformer import PBT
|
|
55
51
|
from .popt import PopulationTransformer
|
|
56
52
|
from .reve import REVE
|
|
57
53
|
from .sccnet import SCCNet
|
|
58
|
-
from .seizure_transformer import SeizureTransformer
|
|
59
54
|
from .sensingdynamics import SensingDynamics
|
|
60
55
|
from .shallow_fbcsp import ShallowFBCSPNet
|
|
61
56
|
from .signal_jepa import (
|
|
@@ -101,12 +96,9 @@ __all__ = [
|
|
|
101
96
|
"BIOT",
|
|
102
97
|
"BENDR",
|
|
103
98
|
"BrainBERT",
|
|
104
|
-
"BrainOmni",
|
|
105
|
-
"BrainTokenizer",
|
|
106
99
|
"CBraMod",
|
|
107
100
|
"CodeBrain",
|
|
108
101
|
"ContraWR",
|
|
109
|
-
"CSBrain",
|
|
110
102
|
"CTNet",
|
|
111
103
|
"DANCE",
|
|
112
104
|
"Deep4Net",
|
|
@@ -147,10 +139,8 @@ __all__ = [
|
|
|
147
139
|
"LUNA",
|
|
148
140
|
"extract_channel_locations_from_chs_info",
|
|
149
141
|
"positions_from_chs_info",
|
|
150
|
-
"MAPA",
|
|
151
142
|
"MEDFormer",
|
|
152
143
|
"MIRepNet",
|
|
153
|
-
"NeuroRVQ",
|
|
154
144
|
"MSCFormer",
|
|
155
145
|
"MSVTNet",
|
|
156
146
|
"MVPFormer",
|
|
@@ -158,7 +148,6 @@ __all__ = [
|
|
|
158
148
|
"PopulationTransformer",
|
|
159
149
|
"REVE",
|
|
160
150
|
"SCCNet",
|
|
161
|
-
"SeizureTransformer",
|
|
162
151
|
"ShallowFBCSPNet",
|
|
163
152
|
"SignalJEPA",
|
|
164
153
|
"SignalJEPA_Contextual",
|
{braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/base.py
RENAMED
|
@@ -779,22 +779,6 @@ class EEGModuleMixin(_BaseHubMixin, metaclass=_BraindecodeDocstringMeta):
|
|
|
779
779
|
|
|
780
780
|
if HAS_HF_HUB:
|
|
781
781
|
|
|
782
|
-
@classmethod
|
|
783
|
-
def from_pretrained(cls, *args, **kwargs):
|
|
784
|
-
# The Hub mixin fills omitted __init__ args from config.json; pin the
|
|
785
|
-
# derived geometry arg so it cannot clash with the caller's one
|
|
786
|
-
# (e.g. caller chs_info vs saved n_chans) in __init__'s checks.
|
|
787
|
-
if "chs_info" in kwargs and "n_chans" not in kwargs:
|
|
788
|
-
chs_info = kwargs["chs_info"]
|
|
789
|
-
kwargs["n_chans"] = None if chs_info is None else len(chs_info)
|
|
790
|
-
elif "n_chans" in kwargs and "chs_info" not in kwargs:
|
|
791
|
-
kwargs["chs_info"] = None
|
|
792
|
-
if ("n_times" in kwargs or "sfreq" in kwargs) and (
|
|
793
|
-
"input_window_seconds" not in kwargs
|
|
794
|
-
):
|
|
795
|
-
kwargs["input_window_seconds"] = None
|
|
796
|
-
return super().from_pretrained(*args, **kwargs)
|
|
797
|
-
|
|
798
782
|
@classmethod
|
|
799
783
|
def _from_pretrained(
|
|
800
784
|
cls,
|
{braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/bendr.py
RENAMED
|
@@ -11,7 +11,6 @@ from einops.layers.torch import Rearrange
|
|
|
11
11
|
from torch import nn
|
|
12
12
|
|
|
13
13
|
from braindecode.models.base import EEGModuleMixin
|
|
14
|
-
from braindecode.modules.channel_tokenizer import ChannelTokenizer
|
|
15
14
|
|
|
16
15
|
# The 20 channels used to pre-train BENDR, in the order expected by the
|
|
17
16
|
# `braindecode/braindecode-bendr` checkpoint. The first 19 entries are the
|
|
@@ -289,25 +288,26 @@ class BENDR(EEGModuleMixin, nn.Module):
|
|
|
289
288
|
# Keep these parameters if needed later, otherwise they are captured by the mixin
|
|
290
289
|
del n_outputs, n_chans, chs_info, n_times, input_window_seconds, sfreq
|
|
291
290
|
|
|
292
|
-
#
|
|
293
|
-
#
|
|
294
|
-
#
|
|
291
|
+
# If the user supplies chs_info, require it to match BENDR_CHANNEL_ORDER
|
|
292
|
+
# exactly (case-insensitive). Arbitrary channel sets should go through
|
|
293
|
+
# InterpolatedBENDR — same pattern as Labram / InterpolatedLaBraM.
|
|
294
|
+
# When chs_info is absent (the usual n_chans=20 path, incl.
|
|
295
|
+
# from_pretrained), no check is performed.
|
|
295
296
|
try:
|
|
296
297
|
_chs_info = self.chs_info
|
|
297
298
|
except ValueError:
|
|
298
299
|
_chs_info = None
|
|
299
|
-
self.channel_tokenizer = None
|
|
300
|
-
backbone_n_chans = self.n_chans
|
|
301
300
|
if _chs_info is not None:
|
|
302
301
|
user_names = [ch["ch_name"] for ch in _chs_info] # type: ignore[index]
|
|
303
302
|
canonical = BENDR_CHANNEL_ORDER
|
|
304
303
|
if [n.lower() for n in user_names] != [n.lower() for n in canonical]:
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
304
|
+
raise ValueError(
|
|
305
|
+
f"BENDR requires chs_info to match BENDR_CHANNEL_ORDER exactly "
|
|
306
|
+
f"({len(canonical)} channels, specific order; last is 'SCALE'). "
|
|
307
|
+
f"Got {len(user_names)} channel(s). For arbitrary channel sets, "
|
|
308
|
+
f"use InterpolatedBENDR "
|
|
309
|
+
f"(from braindecode.models import InterpolatedBENDR)."
|
|
309
310
|
)
|
|
310
|
-
backbone_n_chans = len(_BENDR_TARGET_CHS_INFO)
|
|
311
311
|
|
|
312
312
|
self.encoder_h = encoder_h
|
|
313
313
|
self.contextualizer_hidden = contextualizer_hidden
|
|
@@ -315,7 +315,7 @@ class BENDR(EEGModuleMixin, nn.Module):
|
|
|
315
315
|
self.encoder_only = encoder_only
|
|
316
316
|
|
|
317
317
|
self.encoder = _ConvEncoderBENDR(
|
|
318
|
-
in_features=
|
|
318
|
+
in_features=self.n_chans,
|
|
319
319
|
encoder_h=encoder_h,
|
|
320
320
|
dropout=drop_prob,
|
|
321
321
|
projection_head=projection_head,
|
|
@@ -361,8 +361,6 @@ class BENDR(EEGModuleMixin, nn.Module):
|
|
|
361
361
|
self._build_head(n_outputs)
|
|
362
362
|
|
|
363
363
|
def forward(self, x, return_features=False):
|
|
364
|
-
if self.channel_tokenizer is not None:
|
|
365
|
-
x = self.channel_tokenizer(x)
|
|
366
364
|
encoded = self.encoder(x)
|
|
367
365
|
# encoded: [batch_size, encoder_h, n_encoded_times]
|
|
368
366
|
|
{braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/cbramod.py
RENAMED
|
@@ -11,11 +11,11 @@ from typing import Optional, Sequence
|
|
|
11
11
|
|
|
12
12
|
import torch
|
|
13
13
|
from einops import rearrange
|
|
14
|
+
from einops.layers.torch import Rearrange
|
|
14
15
|
from torch import Tensor, nn
|
|
15
16
|
|
|
16
17
|
from braindecode.models.base import EEGModuleMixin
|
|
17
18
|
from braindecode.modules import CrissCrossTransformerEncoderLayer
|
|
18
|
-
from braindecode.modules.blocks import PatchTokenizer
|
|
19
19
|
|
|
20
20
|
logger = logging.getLogger(__name__)
|
|
21
21
|
|
|
@@ -123,9 +123,6 @@ class CBraMod(EEGModuleMixin, nn.Module):
|
|
|
123
123
|
|
|
124
124
|
Parameters
|
|
125
125
|
----------
|
|
126
|
-
on_non_divisible : {"pad", "crop", "error"}, default="pad"
|
|
127
|
-
How :class:`~braindecode.modules.PatchTokenizer` treats a time axis that
|
|
128
|
-
is not a multiple of ``patch_size`` (right zero-pad, crop, or raise).
|
|
129
126
|
patch_size : int, default=200
|
|
130
127
|
Temporal patch size in samples (200 samples = 1 second at 200 Hz).
|
|
131
128
|
dim_feedforward : int, default=800
|
|
@@ -162,7 +159,6 @@ class CBraMod(EEGModuleMixin, nn.Module):
|
|
|
162
159
|
input_window_seconds=None,
|
|
163
160
|
sfreq=None,
|
|
164
161
|
patch_size: int = 200,
|
|
165
|
-
on_non_divisible: str = "pad",
|
|
166
162
|
dim_feedforward: int = 800,
|
|
167
163
|
n_layer: int = 12,
|
|
168
164
|
nhead: int = 8,
|
|
@@ -187,18 +183,10 @@ class CBraMod(EEGModuleMixin, nn.Module):
|
|
|
187
183
|
sfreq=sfreq,
|
|
188
184
|
)
|
|
189
185
|
del n_chans, chs_info, n_times, input_window_seconds, sfreq, n_outputs
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
try:
|
|
193
|
-
tokenizer_n_times = self.n_times
|
|
194
|
-
except ValueError: # unknown length: nothing to check at construction
|
|
195
|
-
tokenizer_n_times = patch_size
|
|
196
|
-
self.rearrange = PatchTokenizer(
|
|
186
|
+
self.rearrange = Rearrange(
|
|
187
|
+
"batch n_chans (n_patch patch_size) -> batch n_chans n_patch patch_size",
|
|
197
188
|
patch_size=patch_size,
|
|
198
|
-
n_times=tokenizer_n_times,
|
|
199
|
-
on_non_divisible=on_non_divisible,
|
|
200
189
|
)
|
|
201
|
-
self._on_non_divisible = on_non_divisible
|
|
202
190
|
self.patch_embedding = _PatchEmbedding(
|
|
203
191
|
patch_size,
|
|
204
192
|
channels_kernel_stride_padding_norm,
|
|
@@ -223,9 +211,9 @@ class CBraMod(EEGModuleMixin, nn.Module):
|
|
|
223
211
|
|
|
224
212
|
if return_encoder_output:
|
|
225
213
|
self.final_layer = nn.Identity()
|
|
226
|
-
elif self.
|
|
227
|
-
n_patch = self.
|
|
228
|
-
flat_dim = self.
|
|
214
|
+
elif self._n_times is not None and self._n_chans is not None:
|
|
215
|
+
n_patch = self._n_times // patch_size
|
|
216
|
+
flat_dim = self._n_chans * n_patch * emb_dim
|
|
229
217
|
self.final_layer = nn.Sequential(
|
|
230
218
|
nn.Flatten(), nn.Linear(flat_dim, self.n_outputs)
|
|
231
219
|
)
|
|
@@ -239,30 +227,15 @@ class CBraMod(EEGModuleMixin, nn.Module):
|
|
|
239
227
|
self._update_init_kwargs(n_outputs=n_outputs)
|
|
240
228
|
# A head implies a classifier, also when built with return_encoder_output.
|
|
241
229
|
self._update_init_kwargs(return_encoder_output=False)
|
|
242
|
-
if self.
|
|
243
|
-
n_patch = self.
|
|
244
|
-
flat_dim = self.
|
|
230
|
+
if self._n_times is not None and self._n_chans is not None:
|
|
231
|
+
n_patch = self._n_times // self._patch_size
|
|
232
|
+
flat_dim = self._n_chans * n_patch * self._emb_dim
|
|
245
233
|
self.final_layer = nn.Sequential(
|
|
246
234
|
nn.Flatten(), nn.Linear(flat_dim, n_outputs)
|
|
247
235
|
)
|
|
248
236
|
else:
|
|
249
237
|
self.final_layer = nn.Sequential(nn.Flatten(), nn.LazyLinear(n_outputs))
|
|
250
238
|
|
|
251
|
-
def _knows_geometry(self):
|
|
252
|
-
"""True when n_chans and n_times are known (given or derivable), so the
|
|
253
|
-
head can be a real Linear instead of a LazyLinear that cannot be saved
|
|
254
|
-
or loaded before a forward pass."""
|
|
255
|
-
try:
|
|
256
|
-
self.n_chans, self.n_times
|
|
257
|
-
except ValueError:
|
|
258
|
-
return False
|
|
259
|
-
return True
|
|
260
|
-
|
|
261
|
-
def _n_patch(self):
|
|
262
|
-
if self._on_non_divisible == "pad":
|
|
263
|
-
return -(-self.n_times // self._patch_size)
|
|
264
|
-
return self.n_times // self._patch_size
|
|
265
|
-
|
|
266
239
|
def _weights_init(self):
|
|
267
240
|
for m in self.modules():
|
|
268
241
|
if isinstance(m, nn.Linear):
|
{braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/deep4.py
RENAMED
|
@@ -162,18 +162,10 @@ class Deep4Net(EEGModuleMixin, nn.Sequential):
|
|
|
162
162
|
self.stride_before_pool = stride_before_pool
|
|
163
163
|
|
|
164
164
|
min_n_times = self._get_min_n_times()
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
resolved_n_times is None
|
|
168
|
-
and self._input_window_seconds is not None
|
|
169
|
-
and self._sfreq is not None
|
|
170
|
-
):
|
|
171
|
-
resolved_n_times = round(self._input_window_seconds * self._sfreq)
|
|
172
|
-
|
|
173
|
-
if resolved_n_times is not None and resolved_n_times < min_n_times:
|
|
174
|
-
scaling_factor = resolved_n_times / min_n_times
|
|
165
|
+
if self.n_times < min_n_times:
|
|
166
|
+
scaling_factor = self.n_times / min_n_times
|
|
175
167
|
warn(
|
|
176
|
-
f"n_times ({
|
|
168
|
+
f"n_times ({self.n_times}) is smaller than the minimum required "
|
|
177
169
|
f"({min_n_times}) for the current model parameters configuration. "
|
|
178
170
|
"Adjusting parameters to ensure compatibility."
|
|
179
171
|
"Reducing the kernel, pooling, and stride sizes accordingly."
|
|
@@ -225,7 +217,7 @@ class Deep4Net(EEGModuleMixin, nn.Sequential):
|
|
|
225
217
|
in_chans=self.n_chans,
|
|
226
218
|
n_filters_time=self.n_filters_time,
|
|
227
219
|
n_filters_spat=self.n_filters_spat,
|
|
228
|
-
filter_time_length=
|
|
220
|
+
filter_time_length=filter_time_length,
|
|
229
221
|
bias_time=True,
|
|
230
222
|
bias_spat=not self.batch_norm,
|
|
231
223
|
stride=(conv_stride, 1),
|
{braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/eegdino.py
RENAMED
|
@@ -477,10 +477,7 @@ class _Attention(nn.Module):
|
|
|
477
477
|
|
|
478
478
|
def forward(self, x):
|
|
479
479
|
bias = torch.cat((self.q_bias, torch.zeros_like(self.v_bias), self.v_bias))
|
|
480
|
-
|
|
481
|
-
# hooks and adapters attached to it (e.g. LoRA) take part in the forward.
|
|
482
|
-
qkv = self.qkv(x)
|
|
483
|
-
qkv = qkv + bias.to(qkv.dtype) # keep autocast dtype
|
|
480
|
+
qkv = F.linear(x, self.qkv.weight, bias)
|
|
484
481
|
batch, tokens, _ = qkv.shape
|
|
485
482
|
query, key, value = (
|
|
486
483
|
qkv.reshape(batch, tokens, 3, self.nhead, -1)
|
{braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/labram.py
RENAMED
|
@@ -19,7 +19,6 @@ from torch.nn.init import trunc_normal_
|
|
|
19
19
|
from braindecode.functional import rescale_parameter
|
|
20
20
|
from braindecode.models.base import EEGModuleMixin
|
|
21
21
|
from braindecode.modules import MLP, DropPath
|
|
22
|
-
from braindecode.modules.blocks import PatchTokenizer
|
|
23
22
|
|
|
24
23
|
# -----------------------------------------------------------------------------
|
|
25
24
|
# Standard 10-20 system electrode positions used by LaBraM for position embeddings.
|
|
@@ -285,10 +284,6 @@ class Labram(EEGModuleMixin, nn.Module):
|
|
|
285
284
|
|
|
286
285
|
Parameters
|
|
287
286
|
----------
|
|
288
|
-
on_non_divisible : {"pad", "crop", "error"}, default="pad"
|
|
289
|
-
How :class:`~braindecode.modules.PatchTokenizer` treats a time axis that
|
|
290
|
-
is not a multiple of ``patch_size``: right-pad with zeros (default),
|
|
291
|
-
crop the trailing samples, or raise.
|
|
292
287
|
patch_size : int
|
|
293
288
|
The size of the patch to be used in the patch embedding.
|
|
294
289
|
learned_patcher : bool
|
|
@@ -372,7 +367,6 @@ class Labram(EEGModuleMixin, nn.Module):
|
|
|
372
367
|
input_window_seconds=None,
|
|
373
368
|
patch_size=200,
|
|
374
369
|
learned_patcher=False,
|
|
375
|
-
on_non_divisible="pad",
|
|
376
370
|
embed_dim=200,
|
|
377
371
|
conv_in_channels=1,
|
|
378
372
|
conv_out_channels=8,
|
|
@@ -437,12 +431,7 @@ class Labram(EEGModuleMixin, nn.Module):
|
|
|
437
431
|
self.embed_dim = None
|
|
438
432
|
else:
|
|
439
433
|
self.patch_size = patch_size
|
|
440
|
-
self.
|
|
441
|
-
self.n_path = (
|
|
442
|
-
-(-self.n_times // self.patch_size)
|
|
443
|
-
if on_non_divisible == "pad"
|
|
444
|
-
else self.n_times // self.patch_size
|
|
445
|
-
)
|
|
434
|
+
self.n_path = self.n_times // self.patch_size
|
|
446
435
|
|
|
447
436
|
if neural_tokenizer and conv_in_channels != 1:
|
|
448
437
|
warn(
|
|
@@ -467,7 +456,6 @@ class Labram(EEGModuleMixin, nn.Module):
|
|
|
467
456
|
n_chans=self.n_chans,
|
|
468
457
|
emb_dim=self.patch_size,
|
|
469
458
|
learned_patcher=learned_patcher,
|
|
470
|
-
on_non_divisible=on_non_divisible,
|
|
471
459
|
),
|
|
472
460
|
),
|
|
473
461
|
(
|
|
@@ -1018,28 +1006,13 @@ class _SegmentPatch(nn.Module):
|
|
|
1018
1006
|
"""
|
|
1019
1007
|
|
|
1020
1008
|
def __init__(
|
|
1021
|
-
self,
|
|
1022
|
-
n_times=2000,
|
|
1023
|
-
patch_size=200,
|
|
1024
|
-
n_chans=1,
|
|
1025
|
-
emb_dim=200,
|
|
1026
|
-
learned_patcher=True,
|
|
1027
|
-
on_non_divisible="pad",
|
|
1009
|
+
self, n_times=2000, patch_size=200, n_chans=1, emb_dim=200, learned_patcher=True
|
|
1028
1010
|
):
|
|
1029
1011
|
super().__init__()
|
|
1030
1012
|
|
|
1031
1013
|
self.n_times = n_times
|
|
1032
1014
|
self.patch_size = patch_size
|
|
1033
|
-
|
|
1034
|
-
# (no parameters, so checkpoints are unaffected).
|
|
1035
|
-
self.tokenizer = PatchTokenizer(
|
|
1036
|
-
patch_size=patch_size, n_times=n_times, on_non_divisible=on_non_divisible
|
|
1037
|
-
)
|
|
1038
|
-
self.n_patchs = (
|
|
1039
|
-
-(-n_times // patch_size)
|
|
1040
|
-
if on_non_divisible == "pad"
|
|
1041
|
-
else n_times // patch_size
|
|
1042
|
-
)
|
|
1015
|
+
self.n_patchs = n_times // patch_size
|
|
1043
1016
|
self.emb_dim = emb_dim
|
|
1044
1017
|
self.n_chans = n_chans
|
|
1045
1018
|
self.learned_patcher = learned_patcher
|
|
@@ -1069,7 +1042,6 @@ class _SegmentPatch(nn.Module):
|
|
|
1069
1042
|
X_patch: Tensor
|
|
1070
1043
|
[batch, n_chans, n_times//patch_size, patch_size]
|
|
1071
1044
|
"""
|
|
1072
|
-
x = self.tokenizer._prepare_input(x)
|
|
1073
1045
|
batch_size, n_chans_actual, n_times_actual = x.shape
|
|
1074
1046
|
# Input shape: [batch, n_chs, n_times]
|
|
1075
1047
|
|
|
@@ -1131,12 +1103,7 @@ class _PatchEmbed(nn.Module):
|
|
|
1131
1103
|
"""
|
|
1132
1104
|
|
|
1133
1105
|
def __init__(
|
|
1134
|
-
self,
|
|
1135
|
-
n_times=2000,
|
|
1136
|
-
patch_size=200,
|
|
1137
|
-
in_channels=1,
|
|
1138
|
-
emb_dim=200,
|
|
1139
|
-
n_codebooks=62,
|
|
1106
|
+
self, n_times=2000, patch_size=200, in_channels=1, emb_dim=200, n_codebooks=62
|
|
1140
1107
|
):
|
|
1141
1108
|
super().__init__()
|
|
1142
1109
|
self.n_times = n_times
|
|
@@ -1188,6 +1155,10 @@ class _PatchEmbed(nn.Module):
|
|
|
1188
1155
|
"4D (batch, channels, n_patches, patch_size)."
|
|
1189
1156
|
)
|
|
1190
1157
|
|
|
1158
|
+
if n_times % self.patch_size != 0:
|
|
1159
|
+
raise ValueError(
|
|
1160
|
+
f"n_times ({n_times}) must be divisible by patch_size ({self.patch_size})."
|
|
1161
|
+
)
|
|
1191
1162
|
if n_channels % self.in_channels != 0:
|
|
1192
1163
|
raise ValueError(
|
|
1193
1164
|
"The input channel dimension "
|
|
@@ -1366,11 +1337,7 @@ class _Attention(nn.Module):
|
|
|
1366
1337
|
self.v_bias,
|
|
1367
1338
|
)
|
|
1368
1339
|
)
|
|
1369
|
-
|
|
1370
|
-
# and adapters attached to it (e.g. LoRA) take part in the forward.
|
|
1371
|
-
qkv = self.qkv(x)
|
|
1372
|
-
if qkv_bias is not None:
|
|
1373
|
-
qkv = qkv + qkv_bias.to(qkv.dtype) # keep autocast dtype
|
|
1340
|
+
qkv = nn.functional.linear(input=x, weight=self.qkv.weight, bias=qkv_bias)
|
|
1374
1341
|
qkv = qkv.reshape(B, N, 3, self.num_heads, -1).permute(2, 0, 3, 1, 4)
|
|
1375
1342
|
q, k, v = (
|
|
1376
1343
|
qkv[0],
|
{braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/luna.py
RENAMED
|
@@ -25,7 +25,6 @@ from einops import rearrange
|
|
|
25
25
|
from braindecode.functional import rotate_pairs
|
|
26
26
|
from braindecode.models.base import EEGModuleMixin
|
|
27
27
|
from braindecode.models.util import extract_channel_locations_from_chs_info
|
|
28
|
-
from braindecode.modules.blocks import PatchTokenizer
|
|
29
28
|
from braindecode.modules.layers import DropPath
|
|
30
29
|
|
|
31
30
|
|
|
@@ -90,9 +89,6 @@ class LUNA(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
90
89
|
|
|
91
90
|
Parameters
|
|
92
91
|
----------
|
|
93
|
-
on_non_divisible : {"pad", "crop", "error"}, default="pad"
|
|
94
|
-
How :class:`~braindecode.modules.PatchTokenizer` treats a time axis that
|
|
95
|
-
is not a multiple of ``patch_size`` (right zero-pad, crop, or raise).
|
|
96
92
|
patch_size : int
|
|
97
93
|
Number of time samples per patch. Default: 40.
|
|
98
94
|
num_queries : int
|
|
@@ -133,7 +129,6 @@ class LUNA(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
133
129
|
input_window_seconds: Optional[float] = None,
|
|
134
130
|
# Model-specific parameters
|
|
135
131
|
patch_size: int = 40,
|
|
136
|
-
on_non_divisible: str = "pad",
|
|
137
132
|
num_queries: int = 4,
|
|
138
133
|
embed_dim: int = 64,
|
|
139
134
|
depth: int = 8,
|
|
@@ -171,11 +166,6 @@ class LUNA(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
171
166
|
self.embed_dim = embed_dim
|
|
172
167
|
self.num_queries = num_queries
|
|
173
168
|
self.patch_size = patch_size
|
|
174
|
-
self.tokenizer = PatchTokenizer(
|
|
175
|
-
patch_size=patch_size,
|
|
176
|
-
n_times=self.n_times if self._n_times is not None else patch_size,
|
|
177
|
-
on_non_divisible=on_non_divisible,
|
|
178
|
-
)
|
|
179
169
|
self.patch_embed_size = embed_dim
|
|
180
170
|
self.num_heads = num_heads
|
|
181
171
|
self.depth = depth
|
|
@@ -187,9 +177,7 @@ class LUNA(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
187
177
|
|
|
188
178
|
# Layers
|
|
189
179
|
self.patch_embed = _PatchEmbedNetwork(
|
|
190
|
-
embed_dim=self.embed_dim,
|
|
191
|
-
patch_size=self.patch_size,
|
|
192
|
-
on_non_divisible=on_non_divisible,
|
|
180
|
+
embed_dim=self.embed_dim, patch_size=self.patch_size
|
|
193
181
|
)
|
|
194
182
|
self.freq_embed = _FrequencyFeatureEmbedder(
|
|
195
183
|
embed_dim=self.embed_dim, patch_size=self.patch_size
|
|
@@ -281,9 +269,6 @@ class LUNA(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
281
269
|
mask: Optional[torch.Tensor] = None,
|
|
282
270
|
) -> Tuple[torch.Tensor, torch.Tensor]:
|
|
283
271
|
num_channels = channel_locations.shape[1]
|
|
284
|
-
x_signal = self.tokenizer._prepare_input(x_signal)
|
|
285
|
-
if mask is not None:
|
|
286
|
-
mask = self.tokenizer._prepare_input(mask)
|
|
287
272
|
num_patches_per_channel = x_signal.shape[-1] // self.patch_size
|
|
288
273
|
x_patched = self.patch_embed(x_signal)
|
|
289
274
|
freq_embed = self.freq_embed(x_signal)
|
|
@@ -843,15 +828,10 @@ class _CrossAttentionBlock(nn.Module):
|
|
|
843
828
|
|
|
844
829
|
|
|
845
830
|
class _PatchEmbedNetwork(nn.Module):
|
|
846
|
-
def __init__(
|
|
847
|
-
self, embed_dim: int = 64, patch_size: int = 40, on_non_divisible: str = "pad"
|
|
848
|
-
) -> None:
|
|
831
|
+
def __init__(self, embed_dim: int = 64, patch_size: int = 40) -> None:
|
|
849
832
|
super().__init__()
|
|
850
833
|
self.patch_size = patch_size
|
|
851
834
|
self.embed_dim = embed_dim
|
|
852
|
-
self.tokenizer = PatchTokenizer(
|
|
853
|
-
patch_size=patch_size, n_times=patch_size, on_non_divisible=on_non_divisible
|
|
854
|
-
)
|
|
855
835
|
self.in_channels = 1
|
|
856
836
|
self.out_channels = int(embed_dim // 4)
|
|
857
837
|
self.groups = 4
|
|
@@ -891,7 +871,7 @@ class _PatchEmbedNetwork(nn.Module):
|
|
|
891
871
|
x: (B, C, T)
|
|
892
872
|
output: (B, C*S, D) where S = T//patch_size, D = embed_dim
|
|
893
873
|
"""
|
|
894
|
-
x = rearrange(
|
|
874
|
+
x = rearrange(x, "B C (S P) -> B (C S) P", P=self.patch_size)
|
|
895
875
|
x = x.unsqueeze(1)
|
|
896
876
|
x = self.proj_in(x)
|
|
897
877
|
x = rearrange(x, "B E CS D -> B CS (D E)")
|
|
@@ -124,18 +124,13 @@ class ShallowFBCSPNet(EEGModuleMixin, nn.Sequential):
|
|
|
124
124
|
self.drop_prob = drop_prob
|
|
125
125
|
|
|
126
126
|
self.mapping = {
|
|
127
|
+
"conv_time.weight": "conv_time_spat.conv_time.weight",
|
|
128
|
+
"conv_spat.weight": "conv_time_spat.conv_spat.weight",
|
|
129
|
+
"conv_time.bias": "conv_time_spat.conv_time.bias",
|
|
130
|
+
"conv_spat.bias": "conv_time_spat.conv_spat.bias",
|
|
127
131
|
"conv_classifier.weight": "final_layer.conv_classifier.weight",
|
|
128
132
|
"conv_classifier.bias": "final_layer.conv_classifier.bias",
|
|
129
133
|
}
|
|
130
|
-
if self.split_first_layer:
|
|
131
|
-
self.mapping.update(
|
|
132
|
-
{
|
|
133
|
-
"conv_time.weight": "conv_time_spat.conv_time.weight",
|
|
134
|
-
"conv_spat.weight": "conv_time_spat.conv_spat.weight",
|
|
135
|
-
"conv_time.bias": "conv_time_spat.conv_time.bias",
|
|
136
|
-
"conv_spat.bias": "conv_time_spat.conv_spat.bias",
|
|
137
|
-
}
|
|
138
|
-
)
|
|
139
134
|
|
|
140
135
|
self.add_module("ensuredims", Ensure4d())
|
|
141
136
|
pool_class = dict(max=nn.MaxPool2d, mean=nn.AvgPool2d)[self.pool_mode]
|
|
@@ -208,16 +203,14 @@ class ShallowFBCSPNet(EEGModuleMixin, nn.Sequential):
|
|
|
208
203
|
self.add_module("final_layer", module)
|
|
209
204
|
|
|
210
205
|
# Initialization, xavier is same as in paper...
|
|
211
|
-
|
|
212
|
-
|
|
206
|
+
init.xavier_uniform_(self.conv_time_spat.conv_time.weight, gain=1)
|
|
207
|
+
# maybe no bias in case of no split layer and batch norm
|
|
208
|
+
if self.split_first_layer or (not self.batch_norm):
|
|
213
209
|
init.constant_(self.conv_time_spat.conv_time.bias, 0)
|
|
210
|
+
if self.split_first_layer:
|
|
214
211
|
init.xavier_uniform_(self.conv_time_spat.conv_spat.weight, gain=1)
|
|
215
212
|
if not self.batch_norm:
|
|
216
213
|
init.constant_(self.conv_time_spat.conv_spat.bias, 0)
|
|
217
|
-
else:
|
|
218
|
-
init.xavier_uniform_(self.conv_time.weight, gain=1)
|
|
219
|
-
if not self.batch_norm:
|
|
220
|
-
init.constant_(self.conv_time.bias, 0)
|
|
221
214
|
if self.batch_norm:
|
|
222
215
|
init.constant_(self.bnorm.weight, 1)
|
|
223
216
|
init.constant_(self.bnorm.bias, 0)
|
{braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/signal_jepa.py
RENAMED
|
@@ -1593,10 +1593,7 @@ def _pos_encode_contineous(
|
|
|
1593
1593
|
(1 - torch.arange(0, n_dim, 2, device=device) / n_dim) * 2 * math.pi
|
|
1594
1594
|
)
|
|
1595
1595
|
pos_encoding = torch.empty((n_dim,), dtype=torch.float32, device=device)
|
|
1596
|
-
|
|
1597
|
-
# xx = 0 instead of the NaN of 0/0.
|
|
1598
|
-
span = x_max - x_min
|
|
1599
|
-
xx = (x - x_min) / span if span != 0 else 0.0
|
|
1596
|
+
xx = (x - x_min) / (x_max - x_min)
|
|
1600
1597
|
pos_encoding[0::2] = torch.sin(xx * div_term)
|
|
1601
1598
|
pos_encoding[1::2] = torch.cos(xx * div_term)
|
|
1602
1599
|
return pos_encoding
|
{braindecode-1.8.1.dev180519461 → braindecode-1.8.1.dev180667301}/braindecode/models/summary.csv
RENAMED
|
@@ -7,7 +7,6 @@ BIOT,"Sleep Staging, Epilepsy",Prediction,200,"n_chans, n_outputs",3183879,"BIOT
|
|
|
7
7
|
BrainBERT,General,"Prediction, Embedding",2048,"n_chans, n_outputs, n_times",603269,"BrainBERT(n_chans=2, n_outputs=5, n_times=2048)","Foundation Model,Attention/Transformer",iEEG
|
|
8
8
|
CBraMod,General,"Prediction, Embedding",200,"n_outputs",4924000,"CBraMod(n_outputs=2)","Foundation Model",EEG
|
|
9
9
|
CodeBrain,General,"Prediction, Embedding",200,"n_chans, n_outputs, n_times",15238802,"CodeBrain(n_chans=19, n_outputs=2, n_times=6000)","Foundation Model,Attention/Transformer",EEG
|
|
10
|
-
CSBrain,General,"Prediction, Embedding",200,"n_outputs",10962402,"CSBrain(n_outputs=2)","Foundation Model,Attention/Transformer",EEG
|
|
11
10
|
ContraWR,Sleep Staging,"Prediction, Embedding",125,"n_chans, n_outputs, sfreq",1160165,"ContraWR(n_chans=2, n_outputs=5, n_times=3750, emb_size=256, sfreq=125)",Convolution,EEG
|
|
12
11
|
CTNet,Motor Imagery,Prediction,250,"n_chans, n_outputs, n_times",26900,"CTNet(n_chans=22, n_outputs=4, n_times=1000, n_filters_time=8, kernel_size=16, num_heads=2, embed_dim=16)","Convolution,Attention/Transformer",EEG
|
|
13
12
|
Deep4Net,General,Prediction,250,"n_chans, n_outputs, n_times",282879,"Deep4Net(n_chans=22, n_outputs=4, n_times=1000)","Convolution",EEG
|
|
@@ -57,7 +56,6 @@ PopulationTransformer,General,"Prediction, Embedding",2048,"n_chans, n_outputs,
|
|
|
57
56
|
SSTDPN,Motor Imagery,Prediction,250,"n_chans, n_outputs, n_times",19502,"SSTDPN(n_chans=22, n_outputs=4, n_times=1000)","Convolution,Attention/Transformer",EEG
|
|
58
57
|
BENDR,General,"Prediction, Embedding",250,"n_chans, n_times, n_outputs",157141049,"BENDR(n_chans=22, n_outputs=4, n_times=1000)","Foundation Model,Convolution",EEG
|
|
59
58
|
LUNA,General,"Prediction, Embedding",128,"n_chans, n_times, sfreq, chs_info",7100731,"LUNA(n_chans=22, n_times=512, sfreq=128)","Convolution,Channel,Foundation Model",EEG
|
|
60
|
-
MAPA,General,"Prediction, Embedding",2048,"chs_info, n_outputs, n_times",21341572,"MAPA(chs_info=<user>, n_outputs=4, n_times=2048, sfreq=2048)","Attention/Transformer,Foundation Model,Channel",iEEG
|
|
61
59
|
MEDFormer,General,Prediction,250,"n_chans, n_outputs, n_times",5313924,"MEDFormer(n_chans=22, n_outputs=4, n_times=1000)","Foundation Model,Convolution",EEG
|
|
62
60
|
REVE,General,Prediction,200,"n_outputs, n_times, n_chans",69481476,"REVE(n_times=1000, n_outputs=4, n_chans=19)","Foundation Model,Attention/Transformer",EEG
|
|
63
61
|
DGCNN,Emotion Recognition,Prediction,128,"n_chans, n_outputs, n_times, chs_info",1037385,"DGCNN(n_chans=62, n_outputs=4, n_times=128)","Graph Neural Network,Channel",EEG
|
|
@@ -67,8 +65,6 @@ InterpolatedBIOT,"Sleep Staging, Epilepsy",Prediction,200,"chs_info, n_outputs,
|
|
|
67
65
|
InterpolatedEEGPT,General,Prediction,256,"chs_info, n_outputs, n_times",25323137,"InterpolatedEEGPT(chs_info=<user>, n_outputs=4, n_times=1024)","Foundation Model,Attention/Transformer,Channel",EEG
|
|
68
66
|
InterpolatedLaBraM,General,"Prediction, Embedding",200,"chs_info, n_outputs, n_times",5866196,"InterpolatedLaBraM(chs_info=<user>, n_outputs=4, n_times=1000)","Convolution,Foundation Model,Channel",EEG
|
|
69
67
|
InterpolatedSignalJEPA,"Motor Imagery, ERP, SSVEP",Embedding,128,"chs_info",3456882,"InterpolatedSignalJEPA(chs_info=<user>)","Convolution,Channel,Foundation Model",EEG
|
|
70
|
-
BrainOmni,General,"Prediction, Embedding",256,"chs_info, n_outputs, n_times, sfreq",13998310,"BrainOmni(chs_info=chs_info, n_outputs=4, n_times=1024, sfreq=256.0)","Foundation Model,Attention/Transformer","EEG, MEG"
|
|
71
|
-
BrainTokenizer,General,Embedding,256,"chs_info, n_times, sfreq",5050338,"BrainTokenizer(chs_info=chs_info, n_times=1024, sfreq=256.0)","Foundation Model","EEG, MEG"
|
|
72
68
|
TCFormer,Motor Imagery,Classification,250,"n_chans, n_outputs, n_times",77820,"TCFormer(n_chans=22, n_outputs=4, n_times=1000)","Convolution,Attention/Transformer",EEG
|
|
73
69
|
EEGDINO,General,Classification,200,"n_chans, n_outputs, n_times",4539698,"EEGDINO(n_chans=19, n_outputs=4, n_times=1000)","Foundation Model,Attention/Transformer",EEG
|
|
74
70
|
DANCE,General,Event Detection,200,"n_chans, n_outputs, n_times, sfreq, chs_info",29813542,"DANCE(n_chans=19, n_outputs=4, n_times=6400, sfreq=200, input_window_seconds=32.0, chs_info=[{'ch_name': f'E{i+1}', 'kind': 'eeg', 'loc': numpy.random.default_rng(2024).random(12)} for i in range(19)])","Convolution,Attention/Transformer,Channel",EEG
|
|
@@ -76,5 +72,3 @@ STEEGFormer,General,Classification,250,"n_chans, n_outputs, n_times",25305604,"S
|
|
|
76
72
|
MVPFormer,General,"Prediction, Embedding",512,"n_chans, n_outputs, n_times, sfreq",3356978,"MVPFormer(n_chans=22, n_outputs=4, n_times=2000, sfreq=100)","Foundation Model,Attention/Transformer",EEG
|
|
77
73
|
ZUNA,General,"Classification,Embedding",256,"chs_info, n_outputs, n_times",172104100,"ZUNA(chs_info=<user>, n_outputs=4, n_times=1280)","Foundation Model,Channel,Attention/Transformer",EEG
|
|
78
74
|
MIRepNet,Motor Imagery,"Prediction, Embedding",250,"n_chans, n_outputs",5143300,"MIRepNet(n_chans=45, n_outputs=4, n_times=1000)","Convolution,Attention/Transformer,Foundation Model",EEG
|
|
79
|
-
NeuroRVQ,General,"Prediction, Embedding",200,"n_chans, n_outputs, n_times, sfreq, channel_names",7097892,"NeuroRVQ(n_chans=64, n_outputs=4, n_times=800, sfreq=200)","Convolution,Attention/Transformer,Foundation Model,Channel",EEG
|
|
80
|
-
SeizureTransformer,Epilepsy,Event Detection,256,"n_chans, n_outputs, n_times",37848897,"SeizureTransformer(n_chans=19, n_outputs=1, n_times=15360)","Convolution,Attention/Transformer",EEG
|