快速入门指南
本页将向您全面介绍如何运行DL4J示例,启动您自己的项目。
建议您加入我们的Gitter线上交流群或QQ交流群。您可以在Gitter或QQ上请求帮助、提出反馈,不过也请您在遇到问题时先参考本指南中已列出的疑难解答。如果您是初次接触深度学习,我们准备了一份初学者学习计划,包括课程、阅读材料和其他资源的链接。
代码一瞥
Deeplearning4j是一种用于配置深度多层神经网络的领域专用语言。首先都需要用MultiLayerConfiguration
来设定网络的层及其超参数。
超参数是决定神经网络学习方式的变量,包括模型的权重更新次数、如何初始化权重、为节点添加哪些激活函数、使用哪些优化算法以及模型的学习速度。网络配置的示例如下:
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.iterations(1)
.weightInit(WeightInit.XAVIER)
.activation("relu")
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
.learningRate(0.05)
// ……其他超参数
.list()
.backprop(true)
.build();
在Deeplearning4j中,添加一个层的方式是通过NeuralNetConfiguration.Builder()
调用layer
,指定其在所有层中的先后位置(下面示例中标记为零的层是输入层)、输入及输出节点数nIn
和nOut
,以及层的类型:DenseLayer
。
.layer(0, new DenseLayer.Builder().nIn(784).nOut(250)
.build())
网络配置完成后,就可以用model.fit
来训练模型了。
系统要求
- Java (开发者版7或更新版本(仅支持64位版本)
- Apache Maven
- IntelliJ IDEA (建议)或 Eclipse
- Git
在使用以下快速入门指南前,请先安装上述各项。DL4J主要面向熟悉各类生产部署工具、IDE和自动化构建工具的专业Java开发者。若您已熟悉这些工具,使用DL4J将易如反掌。
如果您是初学Java,或对上述工具了解有限,请阅读以下的详细介绍,了解关于安装和设置的帮助。如无需了解这些内容,您可跳至DL4J示例。
如您还没有Java 1.7或更新版本,请在此下载Java开发工具包(JDK)。若要检查已安装的Java版本是否兼容,请使用以下命令:
java -version
请确保安装的是64位的Java,如果使用的是32位版本,会出现 no jnind4j in java.library.path
的错误信息。
Maven是针对Java项目的依赖管理和自动化构建工具。它与IntelliJ等IDE兼容性良好,可以让您轻松安装DL4J项目库。您可参照官方说明为您的系统安装或更新Maven的最新版本。若要检查已安装的Maven是否为最新版本,请使用以下命令:
mvn --version
如果您使用的是Mac,可以在命令行中输入:
brew install maven
Maven被Java开发者广泛使用,可以说是DL4J的必备条件。如果您此前并未从事Java开发,对Maven了解有限,请参考Apache的Maven概述以及本站面向非Java程序员的Maven简介,其中包括额外的疑难解答内容。Ivy和Gradle等其他构建工具也能够运行,但我们对Maven的支持最好。参考5分钟看懂Maven
集成开发环境(IDE)让您能使用我们的API,只需要几个步骤就能配置神经网络。我们强烈推荐使用 IntelliJ,它能与Maven相结合,有效管理依赖项。IntelliJ 社区版是免费的。
其他较为流行的IDE包括 Eclipse 和 Netbeans。我们推荐使用IntelliJ,遇到问题时在Gitter线上交流群中也更容易得到帮助。
请安装最新版本的Git。如您已经安装了Git,您可以让Git自行升级至最新版本:
$ git clone git://git.kernel.org/pub/scm/git/git.git
-
在命令行中输入:
$ git clone https://github.com/deeplearning4j/dl4j-examples.git $ cd dl4j-examples/ $ mvn clean install
-
打开IntelliJ,选择“导入项目”。然后选择“dl4j-examples”主目录。
-
选择“从外部模型导入项目”,确保已选中Maven。
-
继续按向导选项操作。选中以
jdk
开头的SDK。(可能需要点击加号才能看到相关选项……)随后点“完成”。稍等片刻,让IntelliJ 下载所有的依赖项。右下方会显示进度条。 -
在左边的树形目录中选择一个示例。
右击文件,运行。
在您自己的项目中使用DL4J:配置POM.xml文件
若要在您自己的项目中运行DL4J,我们强烈推荐Java用户使用Maven,Scala用户使用SBT等工具。基本的依赖项及其版本如下所示。其中包括:
deeplearning4j-core
,包含神经网络实现方法nd4j-native-platform
,ND4J库的CPU版本,驱动DL4Jdatavec-api
- Datavec是我们的数据向量化和加载库
每个Maven项目都有一个POM文件。运行示例时,POM文件的内容应当如此处所示。
在IntelliJ中,你需要选择将要运行的第一个Deeplearning4j示例。我们建议选择MLPLinearClassifier
,在我们的用户界面中几乎能立即看到该网络将数据分类为两组。文件可以在Github上找到。
右击示例,在下拉菜单中选择绿色按钮即可运行。你会在IntelliJ底部的窗口中看到一系列分值。最右边的数字是网络分类的误差得分。如果网络在进行学习,该数字就会随着处理批次的增加而减少。最后,该窗口会告诉你神经网络模型最终的准确度。
另一个窗口中的图像会显示多层感知器(MLP)对示例数据的分类结果,如下图所示:
祝贺您!您已经用Deeplearning4j成功训练了第一个神经网络。现在你不妨可以试试我们下一个教程:MNIST 初学者,在这里你可以学习到如何使用深度学习来分类图像
相关链接:
后续步骤
- 在Gitter上加入我们。我们有三大社区交流渠道。
- 加入Deeplearning4j QQ 交流群
- 阅读深度神经网络简介或其他详细教程。
- 浏览DL4J文档。
- Python用户:如果您计划对Deeplearning4j运行基准测试,将其与知名的Python框架[x]进行比较,那么请先阅读相关指南,了解如何在JVM上优化堆空间、垃圾回收和ETL。若按其中的指示操作,您至少能将训练速度提高10倍
疑难解答
问: 我在Windows中使用64位的Java,但仍然发生no jnind4j in java.library.path
错误
答:您的路径中可能有不兼容的DLL文件。您需要将以下代码作为VM参数添加(IntelliJ中选择运行 -> 编辑配置 -> VM选项),让DL4J忽略这些文件:
-Djava.library.path=""
问:我遇到了这个错误:Intel MKL FATAL ERROR:Cannot load mkl_intel_thread.dll
,导致JVM故障(不会崩溃,只是停止运行……)。
答:Maven Central当前的rc3.10版本中,libnd4j
库在路径中发现英特尔的MKL时无法将其正确加载。解决方法是添加 System.loadLibrary("mkl_rt")
。
问:SPARK的问题:我正在运行示例,并遇到Spark分析培训或DataVec转换选项等问题。
答:你可能会缺少Spark所需的一些依赖项组件。有关潜在依赖性问题,可以看看这Stack Overflow 的讨论的讨论。Windows用户可能需要来自Hadoop的winutils.exe。请到这里下载winutils.exe(或创建一个hadoop文件夹并将其添加到HADOOP_HOME)。
疑难解答:在Windows上调试UnsatisfiedLinkError
Windows用户可能会看到以下的报错:
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.deeplearning4j.nn.conf.NeuralNetConfiguration$Builder.seed(NeuralNetConfiguration.java:624)
at org.deeplearning4j.examples.feedforward.anomalydetection.MNISTAnomalyExample.main(MNISTAnomalyExample.java:46)
Caused by: java.lang.RuntimeException: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException: Please ensure that you have an nd4j backend on your classpath. Please see: http://nd4j.org/getstarted.html
at org.nd4j.linalg.factory.Nd4j.initContext(Nd4j.java:5556)
at org.nd4j.linalg.factory.Nd4j.(Nd4j.java:189)
... 2 more
Caused by: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException: Please ensure that you have an nd4j backend on your classpath. Please see: http://nd4j.org/getstarted.html
at org.nd4j.linalg.factory.Nd4jBackend.load(Nd4jBackend.java:259)
at org.nd4j.linalg.factory.Nd4j.initContext(Nd4j.java:5553)
... 3 more
如果是这个问题看,看这个页面 。在这种情况下用将“d4jCpu”替换。
在不使用Maven的前提下用Eclipse进行设置
我们推荐使用Maven和Intellij。如果您更青睐Eclipse且不想使用Maven,请参考这篇博文中的Eclipse配置详解。
DL4J概述
Deeplearning4j是一个让您从一开始就能在所有组件中自行挑选的深度学习框架。我们与Tensorflow(配备自动微分的低级别数值计算库)或Pytorch不同。更多详情请参见我们的深度学习库对比分析。Deeplearning4j的几个子项目可以帮助简化端到端应用的构建。
如果您希望在生产环境中部署模型,我们的Keras模型导入功能或许可以提供帮助。
Deeplearning4j有多个子模块,包括可视化用户界面、基于Spark的分布式训练等。这些模块的简介请参见Github上的Deeplearning4j示例。
若要开始构建简单的桌面应用,您需要两个组件:ND4J后端以及deeplearning4j-core
。详细代码参见子模块简易示例。
如果您想要一个更灵活的深度学习API,有两种方法可供选择。您可以单独使用ND4J。参见ND4J示例或计算图API。
如果您希望开展基于Spark的分布式训练,请参阅我们的Spark指南。
请注意,我们无法代您设置Spark。基于Spark和多个GPU的分布式系统基本上都需要由您自行设置。Deeplearning4j只是一个部署在现有Spark集群上的JAR文件。
如果您希望使用Spark和多个GPU,我们推荐在Mesos上运行Spark。
如果您想在移动设备上进行部署,请参阅我们的Android指南]。
我们以原生方式为各类硬件架构部署优化的代码。与其他框架一样,我们采用基于C++的for循环。
相关信息请参见我们的C++框架libnd4j。
Deeplearning4j还有另外两个值得一提的组件:
总体而言,Deeplearning4j的宗旨是成为构建实际应用的端到端平台,而不只是一个配备自动微分功能的张量库。如果您需要的是后者,ND4J中有一个名为samediff的自动微分库。Samediff目前仍是alpha版本,但如果您想尝试为该项目贡献代码,请到线上交流群中向我们提出。
最后,如果您要对Deeplearnin4j开展基准测试,请考虑到我们的线上交流群中了解相关建议。Deeplearning4j拥有全套调节开关,但一部分开关的工作方式可能与Python框架不同。您必须从源码构建Deeplearning4j才能使用某些应用。