We are working on a project in Java using neural networks. We want to test different network structures on our datasets. Now we evaluate which of the Java Neural Networks is the best in terms of performance. We are evaluating Encog, Neuroph and DL4J. Can you please tell us some good resources or your own experiences about this? Thanks
Deeplearning4j creator here:
Encog was written by Jeff Heaton in the early 90s, and was the standard Java DL framework for a long time. I do not believe that Encog handles distributed computing, works with GPUs, Hadoop, Spark or Kafka, or takes into account many of the algorithmic advances in DL since 2006. (Jeff, correct me if I'm wrong!)
Deeplearning4j does all those things. It works on distributed CPUs or GPUs using Spark as an access layer. It's certified on CDH5 and soon on HDP... And it includes implementations of LSTMs (RNNs), deep convolutional nets, RBMs, DBNs and word2vec, among other neural nets. It is currently the most popular DL tool for the JVM, and one of the top 5 DL libraries in the world.
Deeplearning4j is powered by the numerical computing lib ND4J, or n-dimensional arrays for Java. Basically, we ported Numpy to the JVM. That makes DL4J extensible, and you will see us add other algos like reinforcement learning in the near future. ND4J, in turn, runs on libND4J, a C++ library that makes the computation fast. We also built the vectorization library, Canova, that takes any type of data and turns it into a vector that neural nets can understand. We're trying to solve some of the ETL problems upstream from NNs.
Neuroph has strong visualization, but I am not in a position to judge the rest of their framework, so I will let them speak for themselves!
http://deeplearning4j.org
https://github.com/deeplearning4j
https://github.com/deeplearning4j/nd4j
https://github.com/deeplearning4j/libnd4j
There are nearly 2000 devs in Deeplearning4j's user support channel on Gitter. Please join us there if you have questions:
https://gitter.im/deeplearning4j/deeplearning4j
I only have some experience with Deeplearning4j and Encog in the java world, and I think it very much depends on what your goal is. Deeplearning4j is certainly the most sophisticated framework of the 2; it has awesome tools, it works with GPUs, it supports things like LSTMs and Convolutional NNs, it's already set up for distributed training, etc. But as sophisticated and cool as it is, it can also be a bit of a PITA. When the homepage wants you to use a specific IDE and directs to lengthy installation guides of depending projects, you know it'll not be very straightforward. But it's worth it if you need it.
That said, in some cases there's still a lot to be said for Encog. It very easily integrates with pretty much any java project; it's just one .jar to include and off you go. It's very fast and uses your CPU cores very efficiently, it has a very nice and easy to understand API. If you need a java library to efficiently implement a feed-forward NN, or if you want to learn a bit more about working with machine-learning in general, I can't recommend Encog enough. When you run into limitations of Encog, try Deeplearning4j or look a bit beyond java and try something like Tensorflow (which has some java support too).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With