ExceptionInInitializerError when 运行 简单的 DL4J 代码

ExceptionInInitializerError when running simple DL4J code

我目前正在尝试让 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 来处理依赖项,这是我第一次使用它。 (这可能是相关的)

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

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

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

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

顺便说一句,我在 64 位 Windows 10

上使用带有 Java 1.8u101 的 IntelliJ

我不太喜欢 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

The workaround consists in either:

changing tmp permission changing tmp location.

Define TMP, TMPDIR and TEMP to a new directory, add -Djava.io.tmpdir=${TMPDIR} to the java command.

正在将更多来源链接到 troubleshoot and its wiki

FWIW,keras 不是这里的问题,与此堆栈跟踪无关。您对 LD_LIBRARY_PATH 某处的依赖性很差。

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

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

-Djava.library.path=""

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

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