快速入门指南

本页将向您全面介绍如何运行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,指定其在所有层中的先后位置(下面示例中标记为零的层是输入层)、输入及输出节点数nInnOut,以及层的类型:DenseLayer


.layer(0, new DenseLayer.Builder().nIn(784).nOut(250)
                .build())

网络配置完成后,就可以用model.fit来训练模型了。


系统要求

在使用以下快速入门指南前,请先安装上述各项。DL4J主要面向熟悉各类生产部署工具、IDE和自动化构建工具的专业Java开发者。若您已熟悉这些工具,使用DL4J将易如反掌。

如果您是初学Java,或对上述工具了解有限,请阅读以下的详细介绍,了解关于安装和设置的帮助。如无需了解这些内容,您可跳至DL4J示例。 

Java

如您还没有Java 1.7或更新版本,请在此下载Java开发工具包(JDK)。若要检查已安装的Java版本是否兼容,请使用以下命令:


java -version

请确保安装的是64位的Java,如果使用的是32位版本,会出现 no jnind4j in java.library.path 的错误信息。


Apache Maven

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


IntelliJ IDEA

集成开发环境(IDE)让您能使用我们的API,只需要几个步骤就能配置神经网络。我们强烈推荐使用 IntelliJ,它能与Maven相结合,有效管理依赖项。IntelliJ 社区版是免费的。

其他较为流行的IDE包括 EclipseNetbeans。我们推荐使用IntelliJ,遇到问题时在Gitter线上交流群中也更容易得到帮助


Git

请安装最新版本的Git。如您已经安装了Git,您可以让Git自行升级至最新版本:


$ git clone git://git.kernel.org/pub/scm/git/git.git

运行DL4J示例的简易步骤

  • 在命令行中输入:

    
        $ git clone https://github.com/deeplearning4j/dl4j-examples.git
    	 $ cd dl4j-examples/
     	 $ mvn clean install
        
  • 打开IntelliJ,选择“导入项目”。然后选择“dl4j-examples”主目录。


    shadowed image

  • 选择“从外部模型导入项目”,确保已选中Maven。


    shadowed image

  • 继续按向导选项操作。选中以jdk开头的SDK。(可能需要点击加号才能看到相关选项……)随后点“完成”。稍等片刻,让IntelliJ 下载所有的依赖项。右下方会显示进度条。

  • 在左边的树形目录中选择一个示例。


    shadowed image

    右击文件,运行。


在您自己的项目中使用DL4J:配置POM.xml文件

若要在您自己的项目中运行DL4J,我们强烈推荐Java用户使用Maven,Scala用户使用SBT等工具。基本的依赖项及其版本如下所示。其中包括:

  • deeplearning4j-core,包含神经网络实现方法
  • nd4j-native-platform,ND4J库的CPU版本,驱动DL4J
  • datavec-api - Datavec是我们的数据向量化和加载库

每个Maven项目都有一个POM文件。运行示例时,POM文件的内容应当如此处所示

在IntelliJ中,你需要选择将要运行的第一个Deeplearning4j示例。我们建议选择MLPLinearClassifier,在我们的用户界面中几乎能立即看到该网络将数据分类为两组。文件可以在Github上找到

右击示例,在下拉菜单中选择绿色按钮即可运行。你会在IntelliJ底部的窗口中看到一系列分值。最右边的数字是网络分类的误差得分。如果网络在进行学习,该数字就会随着处理批次的增加而减少。最后,该窗口会告诉你神经网络模型最终的准确度。

shadowed image

另一个窗口中的图像会显示多层感知器(MLP)对示例数据的分类结果,如下图所示:

shadowed image

祝贺您!您已经用Deeplearning4j成功训练了第一个神经网络。现在你不妨可以试试我们下一个教程:MNIST 初学者,在这里你可以学习到如何使用深度学习来分类图像

相关链接:


后续步骤

  • 在Gitter上加入我们。我们有三大社区交流渠道。
    • DL4J线上交流群是有关DL4J的主要交流渠道。大多数人都在此出没。
    • 调试帮助面向刚开始接触神经网络的用户。初学者请访问这个交流群!
    • 早期用户交流群面向那些帮助我们检查并改进新版本的用户。注意:这个群供经验更丰富的用户交流。
  • 加入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才能使用某些应用。

与我们在Gitter聊天