Maven 在Intellij项目中使用Nd4j

Maven 在Intellij项目中使用Nd4j,maven,intellij-idea,kotlin,deeplearning4j,nd4j,Maven,Intellij Idea,Kotlin,Deeplearning4j,Nd4j,我正试图在Intellij IDEA的Kotlin项目中使用Nd4j。在projectstructure->Libraries中,我使用“frommaven”命令添加了以下库 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 有了这些库,我可以编译我的项目,但当我运行它时,会出现异常 Cause

我正试图在Intellij IDEA的Kotlin项目中使用Nd4j。在projectstructure->Libraries中,我使用“frommaven”命令添加了以下库

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
原因:java.lang.RuntimeException:ND4J可能缺少依赖项。有关更多信息,请参阅:http://nd4j.org/getstarted.html
位于org.nd4j.nativeblas.NativeOpsHolder(NativeOpsHolder.java:51)
位于org.nd4j.nativeblas.NativeOpsHolder(NativeOpsHolder.java:19)
... 10多
原因:java.lang.UnsatifiedLink错误:java.library.path中没有jnind4jcpu
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
位于java.lang.Runtime.loadLibrary0(Runtime.java:870)
位于java.lang.System.loadLibrary(System.java:1122)
位于org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1220)
位于org.bytedeco.javacpp.Loader.load(Loader.java:980)
位于org.bytedeco.javacpp.Loader.load(Loader.java:879)
位于org.nd4j.nativeblas.Nd4jCpu(Nd4jCpu.java:10)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:348)
位于org.bytedeco.javacpp.Loader.load(Loader.java:938)
位于org.bytedeco.javacpp.Loader.load(Loader.java:879)
位于org.nd4j.nativeblas.Nd4jCpu$NativeOps(Nd4jCpu.java:1310)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:264)
位于org.nd4j.nativeblas.NativeOpsHolder(NativeOpsHolder.java:29)
... 还有11个
原因:java.lang.UnsatisfiedLink错误:java.library.path中没有nd4jcpu
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
位于java.lang.Runtime.loadLibrary0(Runtime.java:870)
位于java.lang.System.loadLibrary(System.java:1122)
位于org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1220)
位于org.bytedeco.javacpp.Loader.load(Loader.java:965)
... 还有21个

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

如果您包括这3个依赖项,那么它失败的原因是零的,除非您出于某种原因使用不受支持的操作系统

我们支持从android到IBMPower的一切,所以这不太可能

我也被你说的没有看到任何JNI库的意思弄糊涂了。这些都在jar文件中。我们使用javacpp(我们也维护它)来管理这些东西。 您将在~/.javacpp/cache下找到这些库——不过您不应该有任何理由去触摸它们

你能澄清一下你在那里找什么吗

除此之外,你没有别的事要做。我想有些东西加载不正确


我们的独立pom开箱即用:-可能会再次检查这个、那个或重新加载。我只能假设你在某种程度上创造了一个错误的项目。文件->新建Maven项目应该是您所需要做的一切。

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。

如何运行程序?使用IDEA中的“run”命令。我尝试编辑运行配置,将包含所有jar的目录添加到java.library.path,但这没有帮助。改为作为gradle任务运行。我自己也遇到过IntelliJ运行配置找不到Gradle依赖项的问题。不知道为什么,可能是IntelliJ中的一个bug,或者是设计上的bug,但这与问题无关。不过,您可能需要添加一个自定义任务来运行它,但是上面也有文章,您能解释一下吗?我没用过格拉德尔。我只是有一个普通的创意项目,用“newproject”命令创建。此外,这些库被定义为Maven依赖项,而不是Gradle依赖项。别理它,因为某种原因我以为你用了格拉德。(虽然它的标签是maven,但不知道为什么我会错过它)我使用的是Mac,没有什么不寻常的。您可以通过以下步骤复制它。1.按照中的步骤创建新项目。确保一切正常,你可以运行它。2.选择文件->项目结构。在Libraries选项卡上,单击+按钮并使用“fromMaven”添加三个依赖项。3.在main()中添加一行以创建NDArray,例如“val x=Nd4j.ones(3)”。4.试着运行它,你会发现错误。你能提出一个问题吗?我们有很多mac用户,但从未遇到过这种情况。一个自给自足的项目会有很大帮助。