入门指南

这是您运行DL4J示例并开始自己的项目所需的一切。

我们建议您加入我们的社区论坛。在那里,您可以请求帮助并提供反馈,但请在询问我们以下已回答的问题之前使用本指南。

如果您是深度学习的新手,我们已包含了初学者的路线图,其中包含了课程、阅读材料和其他资源的链接。

查看必需依赖项以了解dl4j库在不同平台上的支持。

如果您只是想开始,请考虑阅读我们的核心工作流指南。

我们目前正在重新制作入门指南。

如果您发现在此跟随时有困难,请查看Konduit博客,因为它提供了一些来自社区的入门指南。

快速概述

Deeplearning4j起初是一个领域特定语言,用于配置深度神经网络,逐渐发展成为开发人员用于从Java训练模型到将模型部署到生产环境的一套工具。

用例包括:

  1. 数值计算。请参阅:https://github.com/eclipse/deeplearning4j-examples/tree/master/nd4j-ndarray-examples

  2. 使用类似于tensorflow/pytorch的界面定义和训练模型。请参阅:https://github.com/eclipse/deeplearning4j-examples/tree/master/samediff-examples

  3. 模型导入和部署。请参阅:https://github.com/eclipse/deeplearning4j-examples/tree/master/tensorflow-keras-import-examples

  4. 在spark上运行模型。请参阅:https://github.com/eclipse/deeplearning4j-examples/tree/master/dl4j-distributed-training-examples

  5. 用于运行数学代码的小型独立库。请参阅:https://github.com/eclipse/deeplearning4j/tree/master/libnd4j

还有其他用例可用,请随时查看更多示例

先决条件

Java(开发者版本)11或更高版本(仅支持64位版本)

Apache Maven 3.x,不是4(自动构建和依赖管理)

IntelliJ IDEA或Eclipse

Git

您应该安装这些内容以使用此快速入门指南。DL4J面向的是熟悉生产部署、集成开发环境和自动化构建工具的专业Java开发人员。如果您已经具有这方面的经验,那么使用DL4J将会更加容易。

如果您是Java新手或不熟悉这些工具,请阅读以下详细信息以获取安装和设置帮助。否则,请跳转至DL4J示例。

Java

如果您没有Java 11或更高版本,请在此处下载当前的Java开发工具包(JDK)。我们建议使用eclipse temurin或oracle jdk的替代版本。来自其他供应商(如Microsoft、Amazon或Eclipse)的JDK预构建版本是免费的。要检查是否安装了兼容的Java版本,请使用以下命令:

java -version

请确保已安装64位版本的Java,因为如果您决定尝试使用32位版本,则会看到一个告诉您在java.library.path中找不到jnind4j的错误。请确保设置了JAVA_HOME环境变量。请使用jdk 11或17。8已不再得到官方支持,但仍可正常工作。

Apache Maven

Maven是Java项目的依赖管理和自动构建工具。它与IntelliJ等IDE很好地配合,让您轻松安装DL4J项目库。按照他们系统的说明安装或更新Maven到最新版本。要检查是否安装了最新版本的Maven,请输入以下命令:

mvn --version

如果您使用的是Mac,可以直接在命令行中输入以下内容:

brew install maven

Maven在Java开发人员中被广泛使用,并且对于使用DL4J来说几乎是强制性的。如果您来自不同的背景,并且对Maven还不熟悉,请查看Apache的Maven概述和我们的Maven介绍给非Java程序员,其中包含一些额外的故障排除提示。其他构建工具,如Ivy和Gradle,也可以使用,但我们最好支持Maven。

Paul Dubs的Maven指南

Maven五分钟教程

IntelliJ IDEA

集成开发环境(IDE)允许您使用我们的API并在几个步骤中配置神经网络。我们强烈建议使用IntelliJ,它与Maven通信以处理依赖关系。IntelliJ的社区版是免费的。

还有其他流行的IDE,如Eclipse和Netbeans。但是,我们更推荐使用IntelliJ,如果您需要帮助,使用它将使您更容易在社区论坛上找到帮助。

Git

安装最新版本的Git。如果您已经有Git,则可以使用Git本身更新到最新版本:

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

Mac的Mojave OS的最新版本破坏了git,会产生以下错误消息:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

这可以通过运行以下命令来修复:

xcode-select --install

几个简单步骤中的DL4J示例

使用命令行输入以下内容:

git clone https://github.com/eclipse/deeplearning4j-examples.git

ps: 可能会失败,也可以直接浏览器访问 https://github.com/deeplearning4j/deeplearning4j-examples

打开IntelliJ并选择导入项目。然后选择dl4j-examples目录。

选择“从外部模型导入项目”,并确保选择了Maven。

继续完成向导的选项。选择以jdk开头的SDK。(您可能需要单击加号符号才能查看您的选项…)然后点击完成。稍等片刻,直到IntelliJ下载所有依赖项。您将在右下角看到水平条正在工作。

在左侧的文件树中选择一个示例。右键单击文件以运行。

示例存储库包含多个示例项目,这些项目根据不同的功能级别进行分组。您刚刚打开的dl4j-examples项目有最简单的示例,但是请随意探索其他项目!

在您自己的项目中使用DL4J:配置POM.xml文件 要在自己的项目中运行DL4J,我们强烈建议Java用户使用Maven,或者Scala用户使用类似SBT的工具。下面是基本的依赖关系集及其版本。这包括:

deeplearning4j-core,其中包含神经网络实现

nd4j-native-platform,驱动DL4J的ND4J库的CPU版本

datavec-api - Datavec是我们的库,用于向量化和加载数据

每个Maven项目都有一个POM文件。当您运行示例时,POM文件应该如何显示。

在IntelliJ中,您需要选择要运行的第一个Deeplearning4j示例。我们建议选择MLPClassifierLinear,因为您几乎可以立即在我们的UI中看到网络对数据的两组分类。Github上的文件可以在此处找到。

要运行示例,请右键单击它,并在下拉菜单中选择绿色按钮。您将在IntelliJ的底部窗口中看到一系列分数。最右边的数字是网络分类的错误分数。如果您的网络正在学习,则此数字将随着它处理的每批数据而随时间减少。最后,此窗口将告诉您您的神经网络模型变得多么准确:

在另一个窗口中,将显示一个图表,显示多层感知器(MLP)如何对示例中的数据进行分类。它将如下所示:

恭喜!您刚刚使用Deeplearning4j训练了您的第一个神经网络。

下一步

加入我们的社区论坛,网址是community.konduit.ai。

阅读深度神经网络简介。

查看更详细的全面设置指南。

Python爱好者:如果您计划在Deeplearning4j上运行基准测试,将其与著名的Python框架[x]进行比较,请阅读有关如何优化JVM上的堆空间、垃圾收集和ETL的说明。遵循这些说明,您将在训练时间上看到至少10倍的加速。

其他链接

Maven中央仓库上的Deeplearning4j构件

Maven中央仓库上的ND4J构件

Maven中央仓库上的Datavec构件

UCI笔记本的Scala代码

故障排除

问:我正在Windows上使用64位Java,但仍然出现了java.library.path错误,指出没有jnind4j

答:您的路径上可能有不兼容的DLL。要告诉DL4J忽略这些DLL,您必须将以下内容作为VM参数添加(在IntelliJ中运行->编辑配置->VM选项):

-Djava.library.path=""

问:Spark问题我正在运行示例,并且在基于Spark的示例(如分布式训练或datavec转换选项)中遇到问题。

答:您可能缺少一些Spark需要的依赖项。请查看此Stack Overflow讨论以讨论可能的依赖关系问题。Windows用户可能需要来自Hadoop的winutils.exe。

从以下链接下载winutils.exe:https://github.com/steveloughran/winutils,并将其放入null/bin/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

如果是这个问题,请查看此页面。

在这种情况下,将其替换为“Nd4jCpu”。

快速入门模板

现在您已经学会了如何运行不同的示例,我们为您提供了一个模板,其中包含一个带有简单评估代码的基本MNIST训练器。

快速入门模板可在https://github.com/eclipse/deeplearning4j-examples/tree/master/mvn-project-template 上找到。

要使用该模板:

将示例项目中的standalone-sample-project复制到您的项目名称。

将文件夹导入IntelliJ。

开始编码!

关于Eclipse Deeplearning4j的更多信息

Deeplearning4j是一个框架,让您可以从一开始就选择任何东西。

我们不是Tensorflow(一个具有自动差分的低级数值计算库)或Pytorch。Deeplearning4j有几个子项目,使构建端到端应用程序变得相对容易。

如果您想要将模型部署到生产环境中,您可能会喜欢我们从Keras导入的模型。

Deeplearning4j有几个子模块。这些子模块从可视化UI到Spark上的分布式训练都有涵盖。有关这些模块的概述,请查看Github上的Deeplearning4j示例。

如果您想要更高级的神经网络,请考虑使用Tutorials框架。

要使用简单的桌面应用程序并运行更简单的神经网络,您需要两样东西:一个nd4j后端和deeplearning4j-nn。有关更多代码,请参见简化示例子模块。

如果您想要灵活的深度学习API,有两种方法可供选择。您可以使用nd4j独立看看我们的nd4j示例或计算图API以及上述的教程。

如果您想在Spark上进行分布式训练,请查看我们的Spark页面。请记住,我们不能为您设置Spark。如果您想设置分布式Spark和GPU,那基本上是由您自己决定的。Deeplearning4j只是将作为JAR文件部署在现有的Spark集群上。

如果您想在移动设备上部署,请查看我们的Android页面。

我们会针对各种硬件架构原生优化代码。我们使用基于C++的循环,就像其他人一样。有关此信息,请参见我们的C++框架libnd4j。

Deeplearning4j还有另外两个值得注意的组件:

DataVec:用于机器学习数据管道的内置ETL

Deeplearning4j旨在成为构建真实应用程序的端到端平台,而不仅仅是具有自动差分的张量库。

如果您想要一个具有自动差分的张量库,请查看ND4J和Samediff。Samediff仍处于测试阶段,但如果您想要做出贡献,请加入我们的社区论坛。

最后,如果您正在对Deeplearning4j进行基准测试,请考虑来到我们的社区论坛并寻求建议。

Deeplearning4j拥有所有的旋钮,但其中一些可能不像Python框架那样完美地工作。

感谢您阅读我们的快速入门指南!如果您有任何疑问或需要进一步的帮助,请随时联系我们的社区。祝您在深度学习之旅中取得成功!

参考资料

https://deeplearning4j.konduit.ai/multi-project/tutorials/quickstart