我目前正试图让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
答案 0 :(得分:0)
我对dl4j并不多。但是,现有多个重定向到这个:
可能会尝试将nd4j-native-platform
的分类器指定为:
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>${dl4j.version}</version>
<classifier>windows-x86_64</classifier>
</dependency>
按照以下配置使用maven-shade-plugin
进行构建:
https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/pom.xml#L160
或关注this:
解决方法包括:
更改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修复了它。仍不确定原因,但它正在发挥作用。