0

我正在尝试在 Intellij IDEA 的 Kotlin 项目中使用 Nd4j。在 Project Structure -> Libraries 中,我使用“From Maven”命令添加以下库。

org.deeplearning4j:deeplearning4j-core:1.0.0-beta
org.nd4j:nd4j-native-platform:1.0.0-beta
org.datavec:datavec-api:1.0.0-beta

使用这些库,我可以编译我的项目,但是当我运行它时,它会因异常而失败。

Caused by: java.lang.RuntimeException: ND4J is probably missing dependencies. For more information, please refer to: http://nd4j.org/getstarted.html
    at org.nd4j.nativeblas.NativeOpsHolder.<init>(NativeOpsHolder.java:51)
    at org.nd4j.nativeblas.NativeOpsHolder.<clinit>(NativeOpsHolder.java:19)
    ... 10 more
Caused by: java.lang.UnsatisfiedLinkError: no jnind4jcpu in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1220)
    at org.bytedeco.javacpp.Loader.load(Loader.java:980)
    at org.bytedeco.javacpp.Loader.load(Loader.java:879)
    at org.nd4j.nativeblas.Nd4jCpu.<clinit>(Nd4jCpu.java:10)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.bytedeco.javacpp.Loader.load(Loader.java:938)
    at org.bytedeco.javacpp.Loader.load(Loader.java:879)
    at org.nd4j.nativeblas.Nd4jCpu$NativeOps.<clinit>(Nd4jCpu.java:1310)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.nd4j.nativeblas.NativeOpsHolder.<init>(NativeOpsHolder.java:29)
    ... 11 more
Caused by: java.lang.UnsatisfiedLinkError: no nd4jcpu in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1220)
    at org.bytedeco.javacpp.Loader.load(Loader.java:965)
    ... 21 more

查看项目文件夹,我看到 IDEA 已经为 nd4j-native-platform 下载了很多 jar 文件,但是没有任何 JNI 库的迹象。我还需要做什么?

4

2 回答 2

1

Intellij 的“来自 Maven”功能不支持 JavaCPP 和 ND4J(以及其他使用本机代码的库)使用的分类器。Maven 会很好用,但如果你真的因为某种原因不能使用它,你可以手动添加nd4j-native-1.0.0-beta2-macosx-x86_64.jar文件和openblas-0.3.0-1.4.2-macosx-x86_64.jar文件。这应该足以运行简单的事情,但是当您使用越来越多的东西(如 OpenCV)时,您必须手动为所有其他本机依赖项执行此操作。这就是推荐使用 Maven 的原因。

于 2018-10-19T07:44:22.023 回答
0

如果您包含这 3 个依赖项,则它失败的原因为零,除非您出于某种原因在不受支持的操作系统上。

我们支持从 android 到 IBM power 的所有东西,所以这不太可能。

我也对您关于没有看到任何 JNI 库的意思感到困惑。这些都在 jar 文件中。我们使用 javacpp(我们也维护它)来管理这些东西。你会在 ~/.javacpp/cache 下找到这些库——不过你不应该有任何理由去碰它们。

你能澄清你在那里寻找什么吗?

除此之外,您无需做任何其他事情。我假设某些东西没有正确加载。

我们的独立 pom 开箱即用:https ://github.com/deeplearning4j/dl4j-examples/blob/master/standalone-sample-project/pom.xml - 可能仔细检查这个,那个或重新加载。我只能假设您以某种方式错误地创建了项目。文件 -> 新的 Maven 项目应该是您需要做的所有事情。

于 2018-10-08T02:17:55.803 回答