DL4J(Deeplearning4j)是Skymind开源并维护的一个基于JVM 的深度学习框架。也是在Spark平台上可以原生支持分布式模型训练的为数不多的框架之一。DL4J还支持多GPU集群,可以与高性能异构计算框架无缝衔接,进一步提升运算性能。
DL4J中除了ND4J外,还有DataVec(用于数据集的加载和转换),SameDiff(基于图的自动微分、深度学习框架),Arbiter(超参数搜索),LibND4J(底层C++库,调用cuDNN、OpenBLAS等库支持CPU/GPU计算)。ND4J通过这些库共同支撑基于JVM的深度学习应用程序的所有需求。
DL4J将数据集处理与算法模型训练分开处理,使用DataVec库加载和转换数据集,使用张量和 ND4J库训练模型。通过DataVec库的RecordReaderDataSetIterator获取数据,ND4J库的DataSet(存储数据特征和标签的容器)对训练数据进行封装,可以封装单条训练数据,也可以封装一个 Mini-batch,每一次迭代用一个DataSet更新神经网络中参数。在DL4J中构建训练数据集,最终就是生成一个DataSet迭代器或DataSet序列。