
The DeepLearning4j framework
Before jumping into the first example, let's quickly introduce the DeepLearning4j (https://deeplearning4j.org/) framework. It is an open source (released under the Apache license 2.0 (https://www.apache.org/licenses/LICENSE-2.0)), distributed deep learning framework written for the JVM. Being integrated since its earliest releases with Hadoop and Spark, it takes advantage of such distributed computing frameworks to speed up network training. It is written in Java, so is compatible with any other JVM language (including Scala of course), while the underlying computations are written in lower level languages, such as C, C++, and CUDA. The DL4J API gives flexibility when composing deep neural networks. So it is possible to combine different network implementations as needed in a distributed, production-grade infrastructure on top of distributed CPUs or GPUs. DL4J can import neural net models from most of the major ML or DL Python frameworks (including TensorFlow and Caffe) via Keras (https://keras.io/), bridging the gap between the Python and the JVM ecosystems in terms of toolkits for data scientists in particular, but also for data engineers and DevOps. Keras represents the DL4J's Python API.
DL4J is modular. These are the main libraries that comprise this framework:
- Deeplearning4j: The neural network platform core
- ND4J: The NumPy (http://www.numpy.org/) porting for the JVM
- DataVec: A tool for ML ETL operations
- Keras import: To import pre-trained Python models implemented in Keras
- Arbiter: A dedicated library for multilayer neural networks hyperparameter optimization
- RL4J: The implementation of deep reinforcement learning for the JVM
We are going to explore almost all of the features of DL4J and its libraries, starting from this chapter and across the other chapters of this book.
The reference release for DL4J in this book is version 0.9.1.