Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Join forces with ReservoirComputing.jl? #1

Open
MartinuzziFrancesco opened this issue Jan 8, 2025 · 3 comments
Open

Join forces with ReservoirComputing.jl? #1

MartinuzziFrancesco opened this issue Jan 8, 2025 · 3 comments

Comments

@MartinuzziFrancesco
Copy link

Hi there! I am restructuring ReservoirComputing.jl to be more SciML friendly, and I see that there could be some common ground for collaborating here. If you want we can discuss a road forward for reservoir computing models and packages, to either not go too much in parallel with our works or work together!

@bertini97
Copy link
Owner

Hi @MartinuzziFrancesco, yes, I would very much like that. I created this repo because ReservoirComputing.jl looked like a finished project and I needed some features quickly. It was never intended to compete. Right now I'm in the middle of a full rewrite which to port it to Lux.jl for layers and parameters, and using a continuous time solve to evolve it.

It's nice to see that it's getting worked on. Here is my wishlist for a new version, and I'd be happy to contribute something if there is consensus:

  • Usage of Lux.jl for layers.
  • Integration with other SciML constructs: input/output in the form of a (interpolatable) time series, much like ODESolution, (VectorOfArray, DiffEqArray, etc)
  • Using a general surrogate as an output layer, not only linear.
  • Possibility of going continuous time, using OrdinaryDiffEq's solve. This makes the RNN a NeuralCDE.

Let me know what you think. Should I open an issue on your repo?

@bertini97
Copy link
Owner

I took a look at SciML/ReservoirComputing.jl#206 and it looks very similar to my implementation. Great!

@MartinuzziFrancesco
Copy link
Author

I created this repo because ReservoirComputing.jl looked like a finished project and I needed some features quickly.

yeh sorry I have not been too active lately, but I do have some plans for improvements in the coming weeks.

I took a look at SciML/ReservoirComputing.jl#206 and it looks very similar to my implementation. Great!

I wanted exactly to link that! I have continued working on it locally, but I still have not pulled the trigger for the refactor since I need to maintain the current features of the library. My vision is to have something like

esn = ReservoirChain(
    Recurrent(ESNCell(in_dims => res_dims))
    NLAT1(),
    Collect(),
    Readout(res_dims => out_dims)
)

at the high level, where Collect() is a layer only needed to give a flag to collect_states(esn, input_data) in order to collect the internal states. This should allow compose much more complex models like DeepESNs etcetc.
If this all falls into place I think that

and

  • Using a general surrogate as an output layer, not only linear.

should be taken care of by default! I will be using LuxCore and not Lux proper since I would like to maintain lighter dependencies since at the end I don't need 90% of Lux features. If you'd like we can discuss how to proceed with the ReservoirChain approach on the issue you linked already. If you had other approach ideas I'm happy to discuss them!

I like both the other points, if you want to track some progress on that you can open one issue for each on ReservoirComputing.jl and we can discuss possible implementations there!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants