braindecode 1.8.0.dev580__tar.gz → 1.8.0.dev1122__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.0.dev580/braindecode.egg-info → braindecode-1.8.0.dev1122}/PKG-INFO +1 -1
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/augmentation/base.py +25 -1
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/augmentation/functional.py +2 -4
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/augmentation/transforms.py +5 -3
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/training/losses.py +7 -4
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/util.py +16 -10
- braindecode-1.8.0.dev1122/braindecode/version.py +1 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122/braindecode.egg-info}/PKG-INFO +1 -1
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/whats_new.rst +31 -0
- braindecode-1.8.0.dev580/braindecode/version.py +0 -1
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/LICENSE.txt +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/MANIFEST.in +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/NOTICE.txt +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/README.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/augmentation/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/classifier.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/base.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bbci.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bcicomp.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/datasets.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/format.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/hub.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/hub_format.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/hub_io.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/hub_validation.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/iterable.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/chb_mit.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/collate.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/mne.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/moabb.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/nmt.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/registry.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/siena.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/sleep_physionet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/tuh.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/utils.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/xy.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datautil/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datautil/channel_utils.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datautil/hub_formats.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datautil/serialization.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datautil/util.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/eegneuralnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/functional/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/functional/functions.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/functional/initialization.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/atcnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/attentionbasenet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/attn_sleep.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/base.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/bendr.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/biot.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/brainmodule.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/cbramod.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/codebrain.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/config.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/contrawr.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/ctnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/dance.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/deep4.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/deepsleepnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/dgcnn.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eegconformer.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eegdino.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eeginception_erp.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eeginception_mi.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eegitnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eegminer.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eegnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eegnex.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eegpt.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eegsimpleconv.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eegsym.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eegtcnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/emg2qwerty.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/fbcnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/fblightconvnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/fbmsnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/hybrid.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/ifnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/interpolated.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/labram.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/luna.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/medformer.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/meta_neuromotor.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/msvtnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/mvpformer.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/patchedtransformer.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/reve.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/sccnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/shallow_fbcsp.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/signal_jepa.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/sinc_shallow.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/sparcnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/sstdpn.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/steegformer.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/summary.csv +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/syncnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/tcformer.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/tcn.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/tidnet.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/tsinception.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/usleep.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/util.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/zuna.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/activation.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/attention.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/blocks.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/convolution.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/dance_modules.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/filter.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/interpolation.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/layers.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/linear.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/parametrization.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/stats.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/util.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/wrapper.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/mne_preprocess.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/preprocess.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/util.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/windowers.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/regressor.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/samplers/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/samplers/base.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/samplers/ssl.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/training/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/training/callbacks.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/training/scoring.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/__init__.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/attribution.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/confusion_matrices.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/frequency.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/metrics.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/sanity.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/topology.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode.egg-info/SOURCES.txt +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode.egg-info/dependency_links.txt +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode.egg-info/requires.txt +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode.egg-info/top_level.txt +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/Makefile +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/_templates/autosummary/class.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/_templates/autosummary/function.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/api.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/cite.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/conf.py +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/help.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/index.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/install/install.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/install/install_pip.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/install/install_source.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/attention.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/channel.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/convolution.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/filterbank.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/gnn.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/interpretable.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/lbm.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/recurrent.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/spd.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/models.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/models_categorization.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/models_table.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/models_visualization.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/sg_execution_times.rst +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/pyproject.toml +0 -0
- {braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.8.0.
|
|
3
|
+
Version: 1.8.0.dev1122
|
|
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>
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
# Bruno Aristimunha <b.aristimunha@gmail.com>
|
|
4
4
|
# Martin Wimpff <martin.wimpff@iss.uni-stuttgart.de>
|
|
5
5
|
# Valentin Iovene <val@too.gy>
|
|
6
|
+
# Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
6
7
|
# License: BSD (3-clause)
|
|
7
8
|
|
|
8
9
|
from numbers import Real
|
|
@@ -176,6 +177,14 @@ class Compose(Transform):
|
|
|
176
177
|
return X, y
|
|
177
178
|
|
|
178
179
|
|
|
180
|
+
def _as_mixed_target(y, lam_dtype):
|
|
181
|
+
# an untouched target is the same as being mixed with itself with lam of one
|
|
182
|
+
if isinstance(y, (tuple, list)) and len(y) == 3:
|
|
183
|
+
return tuple(y)
|
|
184
|
+
lam = torch.ones(y.shape[0], device=y.device, dtype=lam_dtype)
|
|
185
|
+
return y, y, lam
|
|
186
|
+
|
|
187
|
+
|
|
179
188
|
class _AugmentationCollate:
|
|
180
189
|
"""Collate that applies a transform to each batch, with optional expansion.
|
|
181
190
|
|
|
@@ -193,7 +202,10 @@ class _AugmentationCollate:
|
|
|
193
202
|
``0`` (default) applies the transform in place (batch size unchanged).
|
|
194
203
|
``> 0`` keeps the clean originals and appends ``n_augmentation``
|
|
195
204
|
independently transformed copies, returning ``(X, y)`` of
|
|
196
|
-
``(1 + n_augmentation)`` times the original size.
|
|
205
|
+
``(1 + n_augmentation)`` times the original size. When the transform
|
|
206
|
+
mixes targets, as :class:`braindecode.augmentation.Mixup` does, ``y``
|
|
207
|
+
stays the ``(y_a, y_b, lam)`` triple and the clean originals get a
|
|
208
|
+
mixing coefficient of one.
|
|
197
209
|
"""
|
|
198
210
|
|
|
199
211
|
def __init__(self, transform, device=None, n_augmentation=0):
|
|
@@ -216,6 +228,18 @@ class _AugmentationCollate:
|
|
|
216
228
|
aug_X, aug_y = self.transform(X, y)
|
|
217
229
|
xs.append(aug_X)
|
|
218
230
|
ys.append(aug_y)
|
|
231
|
+
mixed_ys = [
|
|
232
|
+
aug_y
|
|
233
|
+
for aug_y in ys
|
|
234
|
+
if isinstance(aug_y, (tuple, list)) and len(aug_y) == 3
|
|
235
|
+
]
|
|
236
|
+
if mixed_ys:
|
|
237
|
+
# a target-mixing transform such as Mixup returns (y_a, y_b, lam),
|
|
238
|
+
# so the parts are concatenated one by one and the untouched copies
|
|
239
|
+
# are given a mixing coefficient of one
|
|
240
|
+
lam_dtype = mixed_ys[0][2].dtype
|
|
241
|
+
ys = [_as_mixed_target(aug_y, lam_dtype) for aug_y in ys]
|
|
242
|
+
return torch.cat(xs), tuple(torch.cat(part) for part in zip(*ys))
|
|
219
243
|
return torch.cat(xs), torch.cat(ys)
|
|
220
244
|
|
|
221
245
|
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/augmentation/functional.py
RENAMED
|
@@ -1065,13 +1065,11 @@ def mixup(
|
|
|
1065
1065
|
batch_size, n_channels, n_times = X.shape
|
|
1066
1066
|
|
|
1067
1067
|
X_mix = torch.zeros((batch_size, n_channels, n_times)).to(device)
|
|
1068
|
-
y_a =
|
|
1069
|
-
y_b =
|
|
1068
|
+
y_a = y.clone()
|
|
1069
|
+
y_b = y[idx_perm].clone()
|
|
1070
1070
|
|
|
1071
1071
|
for idx in range(batch_size):
|
|
1072
1072
|
X_mix[idx] = lam[idx] * X[idx] + (1 - lam[idx]) * X[idx_perm[idx]]
|
|
1073
|
-
y_a[idx] = y[idx]
|
|
1074
|
-
y_b[idx] = y[idx_perm[idx]]
|
|
1075
1073
|
|
|
1076
1074
|
return X_mix, (y_a, y_b, lam)
|
|
1077
1075
|
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/augmentation/transforms.py
RENAMED
|
@@ -1068,16 +1068,18 @@ class Mixup(Transform):
|
|
|
1068
1068
|
device = X.device
|
|
1069
1069
|
batch_size, _, _ = X.shape
|
|
1070
1070
|
|
|
1071
|
+
# lam follows the dtype of X, numpy draws float64 and that would leak
|
|
1072
|
+
# into the mixed signal and into the loss returned by mixup_criterion
|
|
1071
1073
|
if self.alpha > 0:
|
|
1072
1074
|
if self.beta_per_sample:
|
|
1073
1075
|
lam = torch.as_tensor(
|
|
1074
1076
|
self.rng.beta(self.alpha, self.alpha, batch_size)
|
|
1075
|
-
).to(device)
|
|
1077
|
+
).to(device=device, dtype=X.dtype)
|
|
1076
1078
|
else:
|
|
1077
|
-
lam = torch.ones(batch_size).to(device)
|
|
1079
|
+
lam = torch.ones(batch_size, dtype=X.dtype).to(device)
|
|
1078
1080
|
lam *= self.rng.beta(self.alpha, self.alpha)
|
|
1079
1081
|
else:
|
|
1080
|
-
lam = torch.ones(batch_size).to(device)
|
|
1082
|
+
lam = torch.ones(batch_size, dtype=X.dtype).to(device)
|
|
1081
1083
|
|
|
1082
1084
|
idx_perm = torch.as_tensor(
|
|
1083
1085
|
self.rng.permutation(
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Authors: Robin Schirrmeister <robintibor@gmail.com>
|
|
2
2
|
# Maciej Sliwowski <maciek.sliwowski@gmail.com>
|
|
3
3
|
# Mohammed Fattouh <mo.fattouh@gmail.com>
|
|
4
|
+
# Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
4
5
|
#
|
|
5
6
|
# License: BSD (3-clause)
|
|
6
7
|
|
|
@@ -79,10 +80,11 @@ def mixup_criterion(preds, target):
|
|
|
79
80
|
----------
|
|
80
81
|
preds : torch.Tensor
|
|
81
82
|
Predictions from the model.
|
|
82
|
-
target : torch.Tensor | list of torch.Tensor
|
|
83
|
+
target : torch.Tensor | tuple of torch.Tensor | list of torch.Tensor
|
|
83
84
|
For predictions without mixup, the targets as a tensor. If mixup has
|
|
84
|
-
been applied, a list containing the targets of the two mixed
|
|
85
|
-
samples and the mixing coefficients as tensors.
|
|
85
|
+
been applied, a tuple or list containing the targets of the two mixed
|
|
86
|
+
samples and the mixing coefficients as tensors. A plain tensor is
|
|
87
|
+
always read as targets, whatever the batch size is.
|
|
86
88
|
|
|
87
89
|
Returns
|
|
88
90
|
-------
|
|
@@ -96,7 +98,8 @@ def mixup_criterion(preds, target):
|
|
|
96
98
|
Online: https://arxiv.org/abs/1710.09412
|
|
97
99
|
.. [2] https://github.com/facebookresearch/mixup-cifar10/blob/master/train.py
|
|
98
100
|
"""
|
|
99
|
-
|
|
101
|
+
# only a mixup target is a container, a plain target tensor of length 3 is not
|
|
102
|
+
if isinstance(target, (tuple, list)) and len(target) == 3:
|
|
100
103
|
# unpack target
|
|
101
104
|
y_a, y_b, lam = target
|
|
102
105
|
# compute loss per sample
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# Authors: Robin Schirrmeister <robintibor@gmail.com>
|
|
2
|
+
# Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
2
3
|
#
|
|
3
4
|
# License: BSD (3-clause)
|
|
4
5
|
import glob
|
|
@@ -386,18 +387,23 @@ class ThrowAwayIndexLoader(object):
|
|
|
386
387
|
if isinstance(x, dict):
|
|
387
388
|
if hasattr(x["x"], "type"):
|
|
388
389
|
x["x"] = x["x"].type(torch.float32)
|
|
389
|
-
|
|
390
|
-
y = (
|
|
391
|
-
y.type(torch.float32)
|
|
392
|
-
if self.is_regression
|
|
393
|
-
else y.type(torch.int64)
|
|
394
|
-
)
|
|
390
|
+
cast_target = True
|
|
395
391
|
elif hasattr(x, "type"):
|
|
396
392
|
x = x.type(torch.float32)
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
393
|
+
cast_target = True
|
|
394
|
+
else:
|
|
395
|
+
cast_target = False
|
|
396
|
+
if cast_target:
|
|
397
|
+
target_dtype = torch.float32 if self.is_regression else torch.int64
|
|
398
|
+
if isinstance(y, (tuple, list)) and len(y) == 3:
|
|
399
|
+
y_a, y_b, lam = y
|
|
400
|
+
y = (
|
|
401
|
+
y_a.type(target_dtype),
|
|
402
|
+
y_b.type(target_dtype),
|
|
403
|
+
lam.type(torch.float32),
|
|
404
|
+
)
|
|
405
|
+
elif hasattr(y, "type"):
|
|
406
|
+
y = y.type(target_dtype)
|
|
401
407
|
yield x, y
|
|
402
408
|
|
|
403
409
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.8.0.dev1122"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.8.0.
|
|
3
|
+
Version: 1.8.0.dev1122
|
|
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>
|
|
@@ -48,6 +48,37 @@ Bug fixes
|
|
|
48
48
|
- Make :class:`braindecode.datasets.SleepPhysionet` wake cropping retain the complete
|
|
49
49
|
final sleep annotation without including an extra endpoint sample (:gh:`612` by
|
|
50
50
|
`John Muradeli`_).
|
|
51
|
+
|
|
52
|
+
- Fix :func:`braindecode.training.mixup_criterion` treating a plain target
|
|
53
|
+
tensor of three elements as a mixup ``(y_a, y_b, lam)`` triple. The branch
|
|
54
|
+
was selected on ``len(target) == 3``, which is also true for the targets of
|
|
55
|
+
any batch holding three windows, so a validation batch or a last partial
|
|
56
|
+
batch of that size failed with ``Expected input batch_size (3) to match
|
|
57
|
+
target batch_size (0)``. The mixup branch is now selected on the container
|
|
58
|
+
type. (:gh:`1122` by `Sarthak Tayal`_)
|
|
59
|
+
|
|
60
|
+
- Keep the mixing coefficient of :class:`braindecode.augmentation.Mixup` on the
|
|
61
|
+
dtype of the batch. With ``beta_per_sample=True`` it came straight from numpy
|
|
62
|
+
as ``float64``, which upcast the loss returned by
|
|
63
|
+
:func:`braindecode.training.mixup_criterion` to ``float64`` while the model
|
|
64
|
+
stayed in ``float32``. (:gh:`1122` by `Sarthak Tayal`_)
|
|
65
|
+
|
|
66
|
+
- Let :class:`braindecode.augmentation.AugmentedDataLoader` used with
|
|
67
|
+
``n_augmentation`` greater than zero carry the targets of a transform that
|
|
68
|
+
mixes them. Batches were concatenated as plain tensors, so combining that
|
|
69
|
+
option with :class:`braindecode.augmentation.Mixup` raised ``expected Tensor
|
|
70
|
+
as element 1 in argument 0, but got tuple``. The triple parts are now
|
|
71
|
+
concatenated one by one and the clean originals get a mixing coefficient of
|
|
72
|
+
one. (:gh:`1122` by `Sarthak Tayal`_)
|
|
73
|
+
|
|
74
|
+
- Let :class:`braindecode.EEGClassifier` and :class:`braindecode.EEGRegressor`
|
|
75
|
+
train with a transform that mixes targets. The loader wrapper cast every
|
|
76
|
+
target with ``y.type(...)``, so a batch carrying the ``(y_a, y_b, lam)``
|
|
77
|
+
triple of :class:`braindecode.augmentation.Mixup` stopped the fit with
|
|
78
|
+
``'tuple' object has no attribute 'type'`` before the first batch was seen.
|
|
79
|
+
The triple parts now follow the same classification/regression dtype contract
|
|
80
|
+
as a plain target. (:gh:`1122` by `Sarthak Tayal`_).
|
|
81
|
+
|
|
51
82
|
- Keep :class:`braindecode.preprocessing.EEGPrep` compatible with EEGPrep 0.3,
|
|
52
83
|
which no longer exposes the ``eegprep.utils`` namespace used for sampling-rate
|
|
53
84
|
validation (:gh:`1123` by `Bruno Aristimunha`_).
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.8.0.dev580"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/__init__.py
RENAMED
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/datasets.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/hub_format.py
RENAMED
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/hub_validation.py
RENAMED
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/iterable.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datasets/sleep_physionet.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datautil/channel_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/datautil/serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/functional/initialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/attentionbasenet.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eeginception_erp.py
RENAMED
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/eeginception_mi.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/meta_neuromotor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/models/patchedtransformer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/modules/parametrization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/mne_preprocess.py
RENAMED
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/preprocess.py
RENAMED
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/windowers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/__init__.py
RENAMED
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/attribution.py
RENAMED
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/frequency.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode/visualization/topology.py
RENAMED
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/braindecode.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/_templates/autosummary/class.rst
RENAMED
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/_templates/autosummary/function.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/attention.rst
RENAMED
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/channel.rst
RENAMED
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/convolution.rst
RENAMED
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/filterbank.rst
RENAMED
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/interpretable.rst
RENAMED
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/categorization/recurrent.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.8.0.dev580 → braindecode-1.8.0.dev1122}/docs/models/models_categorization.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|