Model or dataset
nschaetti/EchoTorch avatar
nschaetti/EchoTorch

EchoTorch: Echo State Networks and Reservoir Computing on Top of PyTorch

A Python toolkit for Reservoir Computing and Echo State Network experimentation based on pyTorch. EchoTorch is the only Python module available to easily create Deep Reservoir Computing models.

501 stars116 forksPythonGPL-3.0

At a glance

What is it?
EchoTorch is a research toolkit that implements Echo State Network layers, conceptor filters and ESN-specific datasets as PyTorch components. It is aimed at experiments, not deployment, and its release history and single-maintainer setup are the first things to weigh before adopting it.
Who is it for?
Adopt EchoTorch if you are running ESN or conceptor experiments inside a PyTorch pipeline and want the reservoir layers to sit alongside ordinary nn.Module code; skip it if you need a supported, production-bound dependency. Before committing, verify the PyPI release against the dev branch, confirm the Python and PyTorch versions your environment resolves, and read the GPL-3.0 terms against how you plan to distribute anything built on it.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 60 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap EchoTorch fills for reservoir computing in PyTorch

Reservoir computing splits a recurrent network into two parts: a large, randomly initialised reservoir that is left untrained, and a small readout that is fitted. That makes training cheap compared with backpropagation through time, but it also means the interesting work sits in matrix construction, state collection and readout fitting rather than in a standard optimiser loop. The README frames EchoTorch as a module "to implement and test various flavours of Echo State Network models", and it explicitly says the project is "not intended to be put into production but for research purposes". That sentence is the most useful thing in the repository description, because it tells you what kind of dependency this is.

The target user is someone who already works in PyTorch and wants reservoir layers to behave like other torch components. The README states that "EchoTorch's layers are designed to be integrated into deep architectures for future work and research", and the repository claims it is "the only Python module available to easily create Deep Reservoir Computing models". That is a self-description from the project, not an independently verified comparison, so treat it as a positioning statement rather than a survey result. What is verifiable from the layout is the scope: datasets, evaluation, models, neural network components, transforms and utilities, each in its own subpackage.

Inside the echotorch package layout

The README's index lists six top-level subpackages. echotorch.nn holds the Torch components for ESN and Reservoir Computing, which is where the recurrent machinery lives. echotorch.models provides ready-to-train and generic pre-trained ESN models, so you can skip wiring a network by hand. echotorch.datasets generates or loads task data such as Latch-Copy-Repeat, the logistic map, NARMA timeseries and strange attractors, plus MNIST images. echotorch.transforms handles ESN-specific data transformations, and echotorch.evaluation covers cross-validation and statistical tests for comparing models.

The utilities package is the part worth reading closely before you start. It contains conceptors, matrix generation, hyperparameter optimisation and visualisation. Conceptors are a neural filtering technique associated with reservoir memory work, and the examples directory devotes a large block to them: boolean operations, pattern evidence gathering, loading four patterns and regenerating them, incremental loading with memory management, morphing periodic and random patterns, and a subspace demo. One example is labelled "in research", which is a candid signal about how settled that particular feature is.

The matrix generation module matters because reservoir behaviour depends heavily on how the recurrent weight matrix is built and scaled. Having that as a named utility rather than buried inside a layer constructor is a reasonable design choice for experimental work, since you can swap initialisation strategies without rewriting the model.

Installing EchoTorch and what the examples assume

The README does not include an installation command block in the material available here, so the standard route applies: the project publishes to PyPI, and the development status section carries a PyPI Python version badge. In practice that means pip install echotorch, resolved against whatever Python versions the package metadata declares. Because the badge is generated from package metadata rather than quoted in the text, check the current PyPI page for the exact supported range instead of assuming it matches your interpreter.

PyTorch is a hard dependency, and the version pairing is the practical risk. The most recent release listed is 202101221 (v0.2.3) from January 2021, with earlier entries in June 2020. The dev branch shows a last push of July 2026, so there is a real gap between what PyPI serves and what the repository contains. If you install from PyPI you are likely getting code from the 2021 release line; if you install from the dev branch you get newer code with no release tag behind it. Decide which of those two you want before you write anything.

Running the examples requires the example files themselves, which are organised by topic under examples/conceptors and examples/datasets. They are scripts, not a tutorial series, so expect to read the source to see which dataset generator feeds which model. The project also points to Gitter and a Google Group for collaboration, which is where questions about the dev branch would go.

Conceptors and the memory-management examples

The conceptor examples are the most distinctive part of the project and also the part with the least external validation. The set covers loading patterns into a reservoir's state space, generating new patterns by filtering that space, morphing between periodic and random patterns, and erasing old patterns to manage memory. The README labels the forgetting example as being in research, and the memory management file has no description at all beyond its title.

That asymmetry is informative. Basic ESN training is a well-trodden path: build a reservoir, drive it with input, collect states, fit a linear readout. Conceptor-based memory manipulation is closer to an active research programme, and the examples read like demonstrations of a paper's figures rather than documented APIs. If your work depends on conceptors, you should expect to read the example scripts as the primary documentation, because the README does not explain the math or the expected shapes.

The evaluation subpackage is the counterweight. Cross-validation and statistical tests for comparing ESN models are exactly what you need when the research question is whether one reservoir configuration beats another, and having them in the same package as the model code removes a common source of inconsistency between experiment scripts.

Where EchoTorch is the wrong choice

The README's own statement that the project is not intended for production should be taken literally. There is no claim of API stability, no deprecation policy described, and no release cadence you can plan around: three releases are listed, spanning January 2021 back to June 2020, with the repository's dev branch far ahead of the last tag. A library whose published release is years behind its development branch is a poor fit for a service that needs reproducible builds from a pinned version.

The GPL-3.0 licence is the second constraint. For research code that stays internal this is usually a non-issue, but if you intend to ship a product that links against EchoTorch, the copyleft terms shape what you can distribute and under what conditions. That is a question for your own legal review, not something this article can settle, but it is a reason to check the licence before the first commit rather than after.

The third limitation is scope. EchoTorch is a research toolkit for a specific family of models. If your problem is ordinary sequence modelling, a standard recurrent or transformer implementation in PyTorch will have more documentation, more users and a clearer upgrade path. Reservoir computing earns its place when you want a fixed random reservoir and a cheap readout, or when you are studying the reservoir itself. Outside that, the specialised API is overhead.

How EchoTorch differs from general PyTorch sequence libraries

The closest comparison is not another reservoir computing package but PyTorch's own recurrent modules. torch.nn.LSTM and torch.nn.GRU are trained end to end by backpropagation through time; every weight in the recurrence is learned. EchoTorch inverts that. The reservoir is generated, not trained, and the learning happens in the readout. The consequence is that gradient flow through the recurrence is not the mechanism you rely on, which changes both the compute profile and the kind of debugging you do. When an LSTM underperforms you tune learning rates and architecture; when an ESN underperforms you tune spectral radius, sparsity and input scaling, which is why echotorch.utils.matrix_generation exists as a separate module.

The second difference is the surrounding apparatus. A general sequence library gives you layers and leaves datasets, evaluation and visualisation to you. EchoTorch bundles NARMA and Latch-Copy-Repeat generators, cross-validation helpers and visualisation utilities, because those are the standard benchmarks in this literature. That bundling is convenient for reproducing published ESN results and awkward if you want to plug the reservoir into a pipeline built around a different data format. The transforms subpackage exists precisely to bridge that gap, and it is the module to inspect first if your data does not come from one of the built-in generators.

Maintenance cost and what to check before you commit

The maintenance picture is a single-maintainer research project with a dev branch that is active and a release channel that is not. Upgrading means choosing between a tagged version that predates recent PyTorch changes and an untagged branch that may break without notice. Neither is comfortable for a long-lived codebase, and the cost shows up as pinning: you will likely fix a PyTorch version alongside EchoTorch and treat the pair as a unit.

Licence-wise, GPL-3.0 is a copyleft licence, so distribution of derivative work carries obligations. Whether your specific use triggers them depends on facts this article does not have. Read the licence text and get your own advice.

Concretely, verify three things before adopting. First, install from PyPI and from the dev branch in separate environments and compare the module contents, so you know which code you are actually reading. Second, check the Python and PyTorch versions that resolve, since the badge on the README reflects package metadata and your interpreter may fall outside it. Third, open one conceptor example and one dataset example end to end, because the README describes what each file demonstrates but not how the pieces connect. If those two scripts make sense to you, the rest of the package follows the same pattern.

Editorial conclusion

Adopt EchoTorch if you are running ESN or conceptor experiments inside a PyTorch pipeline and want the reservoir layers to sit alongside ordinary nn.Module code; skip it if you need a supported, production-bound dependency. Before committing, verify the PyPI release against the dev branch, confirm the Python and PyTorch versions your environment resolves, and read the GPL-3.0 terms against how you plan to distribute anything built on it.

Official sources

  1. License: GPL-3.0
  2. nschaetti/EchoTorch on GitHub
  3. Project website
  4. README
  5. Releases
Community notes

Community notes