0

我目前正在尝试让 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

4

3 回答 3

0

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

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

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

-Djava.library.path=""

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

于 2017-08-26T21:08:22.473 回答
0

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

于 2017-08-30T19:20:11.410 回答
0

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

  1. 可能尝试为 as 指定分类器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. 或者按照这个

解决方法包括:

更改 tmp 权限更改 tmp 位置。

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

链接更多资源以进行故障排除及其wiki

于 2017-08-26T17:49:26.370 回答