【问题标题】:ExceptionInInitializerError when running simple DL4J code运行简单的 DL4J 代码时出现 ExceptionInInitializerError
【发布时间】:2017-08-26 16:44:52
【问题描述】:

我目前正在尝试让 dl4j (deeplearning4j) 导入我在 keras 1.2 中训练的模型。

这是我的代码:

public static void main( String[] args )
{
    try {
        MultiLayerNetwork network = KerasModelImport.importKerasSequentialModelAndWeights(
                "C:\\Users\\A\\Documents\\GitHub\\DevanagriRecognizer\\model_keras1.h5");
        System.out.println( "Hello World!" );
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InvalidKerasConfigurationException e) {
        e.printStackTrace();
    } catch (UnsupportedKerasConfigurationException e) {
        e.printStackTrace();
    }
}

我正在使用 Maven 来处理依赖项,这是我第一次使用它。 (这可能是相关的)

当我运行上面的代码时,我得到一个由 UnsatisfiedLinkError: no jnind4jcpu in java.library.path 引起的 ExceptionInInitializerError。

它看起来像是缺少依赖项,但我不知道如何修复它。

这是我的 pom.xml:https://pastebin.com/FzAMwA0z

这是我的完整堆栈跟踪:https://pastebin.com/a2kyUtch

顺便说一句,我在 64 位 Windows 10 上使用 IntelliJ 和 Java 1.8u101

【问题讨论】:

    标签: java maven deeplearning4j dl4j


    【解决方案1】:

    我不太喜欢 dl4j。但是,多个现有重定向到这个:

    1. 可能尝试将nd4j-native-platform 的分类器指定为:

      <dependency>
           <groupId>org.nd4j</groupId>
           <artifactId>nd4j-native-platform</artifactId>
           <version>${dl4j.version}</version>
           <classifier>windows-x86_64</classifier>
      </dependency>
      
    2. 使用 maven-shade-plugin 按照以下配置构建: https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/pom.xml#L160

    3. 或关注this

    解决方法包括:

    更改 tmp 权限更改 tmp 位置。

    定义 TMP、TMPDIR 和 TEMP 到一个新目录,将 -Djava.io.tmpdir=${TMPDIR} 添加到 java 命令。

    将更多来源链接到troubleshoot 及其wiki

    【讨论】:

      【解决方案2】:

      FWIW,keras 不是这里的问题,并且与此堆栈跟踪无关。你在某个地方对你的 LD_LIBRARY_PATH 有不好的依赖。

      如果您使用的是 Windows,请查看: https://github.com/bytedeco/javacpp-presets/wiki/Debugging-UnsatisfiedLinkError-on-Windows

      一个常见的问题是 MKL 与 anaconda。如果您正在使用它,那么另一种解决方法是将库路径设置为空:

      -Djava.library.path=""

      以上称为系统属性。如果有,请在运行时配置中设置它。

      【讨论】:

        【解决方案3】:

        出于某种原因,将 dl4j.version 从 0.8.1-SNAPSHOT 更改为 0.8.0 修复了它。仍然不知道为什么,但它正在工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-01
          • 1970-01-01
          • 2013-08-27
          • 1970-01-01
          • 2017-11-04
          • 2017-08-19
          • 2019-08-30
          • 1970-01-01
          相关资源
          最近更新 更多