mdabros / SharpLearning

Machine learning for C# .Net
MIT License
383 stars 84 forks source link

Duplicate efforts #31

Closed cesarsouza closed 7 years ago

cesarsouza commented 7 years ago

Hi @mdabros!

I've just found your library a couple days ago and couldn't help but notice the similarity between both of our projects, SharpLearning and Accord.NET. Since we both share the same goal (bring serious machine learning to .NET), and instead of duplicating our efforts, wouldn't you be willing to join the Accord.NET project as well?

Seeing your extremely well-organized repository and coding skills, you would be more than welcome in joining Accord.NET as one of its authors.

Regards, Cesar

mdabros commented 7 years ago

Hi @cesarsouza

Thanks for reaching out and thank you for your kind words. Also, thanks for your big efforts in bringing serious machine learning closer to .NET. We definitely share the same goal.

While I like the Accord.NET project, I enjoy my work on SharpLearning, which to me is a very focused effort to bring efficient machine learning to .NET, with an easy to use, high level interface. There are still many things I wish to improve and add to the project, so SharpLearning will continue to be my main focus.

With that said, I will be more than happy to contribute to projects, which can benefit both Accord.NET, SharpLearning, and other machine learning projects. So, even though I am not joining Accord.NET, I hope we can continue the discussion, learn from each other, and eventually achieve the overall goal of bringing serious machine learning to .NET.

Best regards Mads

cesarsouza commented 7 years ago

Hi @mdabros thank you very much for the response!

Please be sure I completely understand how you feel towards bringing SharpLearning to the .NET machine learning world. When I started Accord back in 2008/2009 there weren't many sources to look for inspiration, which is clearly very different from today's perspective. So far, I think you are doing perfectly right given that you have begun from the very start with a true open-source license (MIT). I am also in the process of converting most of the codebase of Accord.NET to MIT (https://github.com/accord-net/framework/issues/940), so if you see any subparts of the project that you would like to see in SharpLearning and that I've written it myself (which you can see by the copyright header at the top of each file), please feel free to take inspiration and let me know if you would like it to be licensed under MIT.

But in any case, I would also like to know (if I may) - what has driven you to start your own project instead of using Accord.NET in the first place?

Kudos for the great work, Cesar

cesarsouza commented 7 years ago

Oh, and also before I forget - recently I had just managed to get Keras Sharp working with CNTK (ahead of TensorFlowSharp, which was the framework I had initially started with). If you would still like to contribute to that project, and add SharpLearning bindings to it, please feel free to do so.

Regards, Cesar

mdabros commented 7 years ago

@cesarsouza Yes, compared to 2008/2009, it is definitely a whole other world today. Things have really been speeding up these past 5-10 years - and they don´t seem to be slowing down.

Thank you very much for sharing the implementations of Accord.NET and it sounds good with the move to the MIT license, it makes things alot more simple for people who want to use the library. You are of course also welcome to seek inspiration in SharpLearning – there are both good and bad things to choose from :-).

Why I chose to start my own project instead of using Accord.Net is a bit of a long story, but I will try to condense it to a few concrete reasons. Before I start, I should mention that I fully appreciate that the Accord.Net framework is a much larger package than SharpLearning, covering a much broader range of areas and topics, whereas SharpLearning only focuses on a subset of these. So I know a huge amount effort and work has gone into developing the framework, and I have a lot of respect for this.

I started looking into .NET machine learning libraries around 2011/2012. My reference at the time was sklearn from Python and I wanted something in .NET that could match the speed, efficiency, and ease of use of this library. My focus was on decision tree ensembles (Adaboost, RandomForest, and GradientBoost) for regression and classification. I found Accord.NET but at the time, for my specific case, it was lagging in the following areas:

  1. Supported algorithms (I believe only Adaboost classification was available at the time).
  2. Speed and memory consumption (sklearn was faster and more efficient with memory).
  3. Ease of use (at the time it was slightly complicated to setup a learner/teacher algorithm).

Again, the observations are only from my specific area of tree ensembles, and I know some of these have been improved since then.

Besides library specific reasons, I also chose to develop SharpLearning to learn more about machine learning, and in the end, this was probably the largest factor in my decision.

Regarding TensorFlowSharp and Keras-Sharp, I still have on my todo list to contribute with something useful on both projects. But as always, spare time is the main limiting factor.

Best regards Mads

mdabros commented 7 years ago

I will close this issue for now.

@cesarsouza By the way, great work with getting Keras-Sharp running with CNTK, I will try out the as soon as time permits.

best regards Mads

cesarsouza commented 6 years ago

@mdabros,`

Cool, no worries. Keras# is still a work-in-progress - there are things that I managed to get working with TensorFlowSharp that I still haven't with CNTK and things with CNTK that I still haven't get working with TensorFlowSharp. However, both libraries are about to make new releases quite soon, so we will see if the situation will change after that!

Regards, Cesar