DeepLearning4J是什么?

DeepLearning4J(DL4J)是一套基于Java语言的神经网络工具包,可以构建、训练和部署神经网络。


DeepLearning4J的组件

DeepLearning4J包括以下各个子项目。

  • DataVec进行数据摄取,将数据标准化并转换为特征向量
  • DeepLearning4J提供配置神经网络、构建计算图的工具
  • Keras Model Import(Keras模型导入)帮助用户将已训练的Python和Keras模型导入DeepLearning4J和Java环境。
  • ND4J让Java能够访问所需的原生库,使用多个CPU或GPU快速处理矩阵数据。
  • DL4J-Examples(DL4J示例)包含图像、时间序列及文本数据分类与聚类的工作示例。
  • ScalNet是受Keras启发而为Deeplearning4j开发的Scala语言包装。它通过Spark在多个GPU上运行。
  • RL4J用于在JVM上实现深度Q学习、A3C及其他强化学习算法。
  • Arbiter帮助搜索超参数空间,寻找最理想的神经网络配置。

DataVec

数据的摄取、清理、联接、缩放、标准化和转换是开展任何类型的数据分析时都必须完成的工作。这类工作可能有些无趣,但却是深度学习的先决条件。DataVec是专为这一流程设计的工具包。数据科学家和开发人员可以用其中的工具将图像、视频、声音、文本和时间序列等原始数据转变为特征向量,输入神经网络。


Github代码库

DataVec的Github代码库请见此处。代码库的结构如下。

  • datavec-dataframe:相当于Pandas Dataframe的DataVec内置工具
  • datavec-api:数据预处理和数据加工管道定义的规则。
  • datavec-data:让系统知道如何理解声音、视频、图像、文本数据类型
  • datavec-spark:在Spark上运行分布式数据加工管道
  • datavec-local:在桌面上独立运行DataVec。用于推断。
  • datavec-camel:与外部Camel组件连接。Camel让您能定义路由,同多个数据来源进行集成。datavec-camel可以将DataVec作为目的地,把数据从任何您所指定的Camel来源发送至DataVec。

DataVec示例

我们在Github上的示例代码库中提供DataVec示例,详见此处

相关示例的简介汇总请见此处


JavaDoc

DataVec的JavaDoc请见此处


DataVec概述

神经网络专门处理多维数组形式的数值数据。DataVec可以将来自一个CSV文件或一批图像的数据序列化,转换为数值数组。


DataVec:常用类

以下是一些重要的DataVec类:

  • Input Split

将数据分为测试集和训练集

  • InputSplit.sample将数据分为测试集和训练集

数据随机化

  • FileSplit.random用于数据随机化

数据读取和序列化的基类。RecordReader摄取输入数据,返回一个可序列化对象(Writable)的列表。

  • RecordReader

具体的RecordReader实现类

  • CSVRecordReader用于处理CSV数据
  • CSVNLinesSequenceRecordReader用于处理序列数据
  • ImageRecordReader用于处理图像
  • JacksonRecordReader用于处理JSON数据
  • RegexLineRecordReader用于解析日志文件
  • WavFileRecordReader用于处理音频文件
  • LibSvmRecordReader用于支持向量机
  • VideoRecordReader用于读取视频

数据的重新组织、联接、标准化和转换。

  • Transform

具体的Transform实现类

  • CategoricalToIntegerTransform用于将类别名称转换为整数
  • CategoricalToOneHotTransform将类别名称转换为one-hot表示
  • ReorderColumnsTransform对列进行重排
  • RenameColumnsTransform对列进行重命名
  • StringToTimeTransform转换时间字符串

输入数据的标签可以基于图像存储的目录位置。

  • ParentPathLabelGenerator基于父目录的标签
  • PatternPathLabelGenerator生成基于文件路径内一个字符串的标签

数据标准化

  • Normalizer:虽然属于ND4J,但这里也应当提一下

DeepLearning4J

DeepLearning4J用于设计神经网络


Github代码库

DeepLearning4J的Github代码库请见此处。代码库的结构如下。

  • deeplearning4j-core:包括datasetiterators和在桌面上运行DL4J所需的全部代码。
  • deeplearning4j-cuda:包括cudnn和所有同cuda相关的代码。
  • deeplearning4j-graph用于deepwalk的图像处理。
  • deeplearning4j-modelimport:导入来自Keras的神经网络模型,可以借此导入Theano、Tensorflow、Caffe、CNTK等主流学习框架的模型
  • deeplearning4j-nlp-parent:英语、日语、韩语文本分析以及UIMA等工具集的外部分词器和插件。UIMA原本即包括依赖解析、语义角色标记、关系提取和QA系统等功能。我们与UIMA等工具集进行集成,将数据传递给word2vec。
  • nlp:Word2vec、Doc2vec及其他相关工具。
  • deeplearning4j-nn :精简版的神经网络领域专用语言(DSL),依赖项较少。可配置多层网络,用一种构建器模式来设置超参数。
  • deeplearning4j-scaleout:AWS预配置,用parallelwrapper进行桌面参数平均化(单机96核),不希望运行Spark时可不运行;一个版本采用参数服务器,另一个不用;streaming文件夹是基于Kafka和Spark的流式数据处理;spark文件夹是基于Spark的网络训练和自然语言处理:分布式Word2Vec
  •  
  • deeplearning4j-ui-parent:神经网络训练的示意性评估和可视化

JavaDoc

DeepLearning4J的JavaDoc可在此处获取。


DeepLearning4J示例

DeepLearning4J示例的Github代码库请见此处

相关示例的简介汇总请见此处


DeepLearning4J的常用类

  • MultiLayerConfiguration 配置一个网络
  • MultiLayerConfiguration.Builder配置网络的构建器接口
  • MultiLayerNetwork按配置构建网络
  • ComputationGraph构建计算图式网络
  • ComputationGraphConfiguration计算图配置
  • ComputationGraphConfiguration.GraphBuilder计算图配置的构建器接口
  • UiServer添加一个基于网页的GUI界面,以便查看训练参数进展以及网络配置

JavaDoc

如果您曾经用过Python的深度学习库Keras,希望将已训练的模型或模型配置导入DeepLearning4J,那么请使用“模型导入”功能。


Github代码库

模型导入其实是DeepLearning4J的一部分,但很有必要将其单独列为一段。Github文件夹请见此处



模型导入示例

我们将在此处添加示例


模型导入的常用类

可以用KerasModel.Import将已保存的Keras模型导入至DeepLearning4J的MultiLayerNetwork或计算图中


视频

下面的视频介绍了如何将Keras模型导入DL4J:


ND4J

ND4J是DeepLearning4J的数值处理库和张量库,在JVM中实现NumPy的功能。


Github代码库

ND4J的Github代码库请见此处。ND4J是用于处理n维数组(NDArrays)的DSL。


JavaDoc

ND4J的JavaDoc可在此处获取。


ND4J示例

ND4J示例请见此处


ND4J的常用类

您可能不会直接使用下面的这些类,而是在配置神经网络时用到。在后台,您为OptimizationAlgorithm(优化算法)、Updater(更新器)、LossFunction(损失函数)设定的配置都是在ND4J之中完成的。

  • DataSetPreProcessor:图像或数值数据标准化的工具
  • BaseTransformOp:各类激活函数,包括tanh、sigmoid、relu、Softmax……
  • GradientUpdater:随机梯度下降、AdaGrad、Adam、Nesterov……

ScalNet

ScalNet针对Scala语言开发,功能相当于Keras。它是DeepLearning4J的Scala语言包装,可以在多个GPU上运行Spark。


Github代码库

Github上的ScalNet代码库


RL4J

RL4J是在Java中实现深度Q学习、A3C及其他强化学习算法的库和环境,与DL4J和ND4J相集成。


Github代码库


Arbiter

Arbiter帮助您搜索超参数空间,为神经网络寻找最理想的参数组合及架构。这非常重要,因为寻找恰当的架构和超参数是一个很大的组合问题。来自微软研发部等企业实验室的ImageNet大赛获胜团队正是通过搜索超参数空间才得出了ResNet这样的150层神经网络。


Github代码库

Github代码库请见此处

  • arbiter-core:Aribter-core用网格搜索等算法来搜索超参数空间。它会提供一个GUI界面。
  • arbiter-deeplearning4j:Arbiter可以同DL4J模型互动。在进行模型搜索时,您需要能运行模型。这样可以对模型进行试点,进而找出最佳的模型。
与我们在Gitter聊天