Work in progress.
This repository contains an implementation of conceptors with echo state networks. It is a work in progress.
- Basic implementation of echo state networks
- Basic implementation of "standard" conceptors
- Store multiple one-dimensional patterns in a network using conceptors, then reproduce their dynamics without input: compute conceptors, then load patterns
- Basic logic operations to morph different conceptors
- Add online training of conceptors
- Basic implementation of autoconceptors
- Basic implementation of random feature conceptors
- Basic implementation of diagonal conceptors
- Building up more complex, modular architectures
- Implement the de-noising & classification task
- Attending to a signal in a mixture
- Equalizing arbitrary filters on signals
This repository uses Python 3.8 (you can use pyenv to manage Python versions) and the pip package manager. This works on Linux and MacOS. Once pyenv is installed, you can run
pyenv install 3.8.0
pyenv global 3.8.0
to use Python 3.8.
We recommend using pipenv in order to manage your Python libraries and dependencies.
pip install pipenv
pipenv update
Before installing the packages, you need to download jaxlib
from source. For Linux, you will need to change the Pipfile to match the followinf filename:
curl -O https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.1.71-cp38-none-manylinux2010_x86_64.whl
mv jaxlib-0.1.71-cp38-none-manylinux2010_x86_64.whl jaxlib.whl
For MacOS:
curl -O https://storage.googleapis.com/jax-releases/mac/jaxlib-0.1.71-cp38-none-macosx_10_9_x86_64.whl
mv jaxlib-0.1.71-cp38-none-macosx_10_9_x86_64.whl jaxlib.whl
Finally, install the packages with:
pipenv install
The file esn.py
contains the modules for this project.
- The
ESN
class contains everything concerning the echo state network. - The
Optimizer
class is an abstract class for any optimizer that might want to be used for computing the readout weights of the ESN. We provide the two optimizersLinearRegression
andRidgeRegression
. Instances of an optimizer class will then be passed to theESN.compute_weights
orESN.update_weights
methods.