运行简单的DL4J代码时出现ExceptionInInitializerError

时间:2017-08-26 16:44:53

标签: java maven deeplearning4j dl4j

我目前正试图让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引起的ExceptionInInitializerError:java.library.path中没有jnind4jcpu。

它看起来像缺少依赖,但我不知道如何解决它。

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

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

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

3 个答案:

答案 0 :(得分:0)

我对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

  4.   

    解决方法包括:

         

    更改tmp权限更改tmp位置。

         

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

    将更多来源关联到troubleshoot及其wiki

答案 1 :(得分:0)

FWIW,keras在这里不是问题,并且与此堆栈跟踪无关。你在某处的LD_LIBRARY_PATH上有很糟糕的依赖。

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

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

-Djava.library.path = “”

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

答案 2 :(得分:0)

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