【问题标题】:Deeplearning4j example does not work with gradleDeeplearning4j 示例不适用于 gradle
【发布时间】:2018-04-07 19:36:43
【问题描述】:

我正在尝试从 deeplearning4j 示例运行 CnnSentenceClassification。我将此文件移动到我的 Gradle 项目中。当我从 Eclipse 运行课程时,它工作正常。但是,当我从 ./gradlew run 运行它时,出现以下错误:

Exception in thread "main" java.lang.ExceptionInInitializerError
at 
main.CnnSentenceClassification.main(CnnSentenceClassification.java:75)
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:6089)
at org.nd4j.linalg.factory.Nd4j.<clinit>(Nd4j.java:201)
... 1 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:258)
at org.nd4j.linalg.factory.Nd4j.initContext(Nd4j.java:6086)
... 2 more

我检查了一下,nd4j-api-0.9.1.jar 在我的类路径中。这是我的build.gradle

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

repositories {
    jcenter()
}

mainClassName="main.CnnSentenceClassification"

dependencies {
    compile group: 'org.deeplearning4j', name: 'deeplearning4j-core', version: '0.9.1'
    compile group: 'org.deeplearning4j', name: 'deeplearning4j-nlp', version: '0.9.1'       

    testCompile group: 'org.nd4j', name: 'nd4j-native-platform', version: '0.9.1'
    compile group: 'org.nd4j', name: 'nd4j-api', version: '0.9.1'

    compile "org.slf4j:slf4j-simple:1.7.25"
    compile "org.slf4j:slf4j-api:1.7.25"
}

【问题讨论】:

    标签: java eclipse gradle deeplearning4j nd4j


    【解决方案1】:

    我遇到了同样的问题。希望它可以为其他人节省时间

    您需要一个 ND4J 后端,这意味着只需在项目的 pom 中包含以下依赖项:

    <dependency>
        <groupId>org.nd4j</groupId>
        <artifactId>nd4j-native</artifactId>
        <version>0.9.1</version>
    </dependency>
    

    对于 Gradle,只需在依赖项中添加以下行:

    compile "org.nd4j:nd4j-native:0.9.1"
    

    本机后端使用 CPU 进行计算。 启用 CUDA 的显卡还有另一个依赖项。

    我发现此链接很有帮助: DL4J Performance Debugging

    【讨论】:

    • 正如他在问题中所说,他正在使用 Gradle,因此提供 Maven 链接并没有太大帮助。
    • 试试这个:编译“org.nd4j:nd4j-native:0.9.1”
    • 或者只是访问 maven 存储库(你有 gradle 和 maven 以及其他构建系统):​​mvnrepository.com/artifact/org.nd4j/nd4j-native/0.9.1
    【解决方案2】:

    您在 nd4j 后端有测试范围。 nd4j 后端绝不是可选的。 https://nd4j.org/backend.html

    错误就在消息中。我们甚至在堆栈跟踪中为您提供了一个带有解释的链接。

    【讨论】:

    • 非常感谢您的回答。我知道 ND4j 不是可选的。但关键是为什么它在 Eclipse 中起作用?我没有单独安装 ND4j。
    • 我已经告诉过你了。这是因为你有 nd4j 依赖(不是 API nd4j-NATIVE 大写强调)你在滥用 nd4j。 nd4j 后端不应该是测试依赖项。
    • 非常感谢。它是固定的。
    • 链接已损坏。最好解释一下而不是发布链接。谢谢
    • 如果不必从“NDArrays:它们如何存储在内存中?”开始研究 nd4j 的整个概念,就可以获得关于这个“后端”想法的一些信息会更好。我只是想用 deeplearning4j 训练一些模型,而不是研究 nd4j 好几天。 (而且我没有得到后端,即使添加了 nd4j-native 等等)
    猜你喜欢
    • 2018-06-15
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    相关资源
    最近更新 更多