我正在研究一个项目,该项目需要训练DNN,然后在Java环境中运行训练后的模型。由于训练数据需要大量的操作,因此我使用Knime及其Keras库来完成大部分工作,并将训练后的模型导出到Keras h5文件中,该文件可以加载到DL4J中(我正在使用Knime Keras Integration 4.1.0v201911171432和DL4J 1.0.0-beta6)。
建模正在进行中,但是对于POC,我通过链接以下节点创建了一个网络:
然后使用“ Keras Network Writer”节点对它进行训练并输出,该节点将写入.h5文件。
在Java中,我包括以下依赖项:
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-core</artifactId>
<version>1.0.0-beta6</version>
</dependency>
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-beta6</version>
</dependency>
并运行以下代码:
import org.deeplearning4j.nn.modelimport.keras.KerasModelImport;
…
ComputationGraph model = KerasModelImport.importKerasModelAndWeights("2x2x2keras.h5");
哪个返回以下异常
java.lang.IllegalStateException: Invalid configuration: network has no outputs. Use .setOutput(String...) to specify (and give an ordering to) the output vertices, or use allowNoOutputs(true) to disable this check
at org.deeplearning4j.nn.conf.ComputationGraphConfiguration.validate(ComputationGraphConfiguration.java:375) ~[deeplearning4j-nn-1.0.0-beta6.jar:na]
at org.deeplearning4j.nn.conf.ComputationGraphConfiguration$GraphBuilder.build(ComputationGraphConfiguration.java:1197) ~[deeplearning4j-nn-1.0.0-beta6.jar:na]
at org.deeplearning4j.nn.modelimport.keras.KerasModel.getComputationGraphConfiguration(KerasModel.java:394) ~[deeplearning4j-modelimport-1.0.0-beta6.jar:na]
at org.deeplearning4j.nn.modelimport.keras.KerasModel.getComputationGraph(KerasModel.java:415) ~[deeplearning4j-modelimport-1.0.0-beta6.jar:na]
at org.deeplearning4j.nn.modelimport.keras.KerasModel.getComputationGraph(KerasModel.java:404) ~[deeplearning4j-modelimport-1.0.0-beta6.jar:na]
at org.deeplearning4j.nn.modelimport.keras.KerasModelImport.importKerasModelAndWeights(KerasModelImport.java:173) ~[deeplearning4j-modelimport-1.0.0-beta6.jar:na]
at dev.aisandbox.tftest.TFRunner.run(TFRunner.java:18) ~[classes/:na]
因为这是我第一次尝试使用Knime管理数据流,所以不能确定问题是文件(在Knime中创建)还是代码加载到DL4J + Java中。我假设有关setOutput的注释是在使用python脚本创建网络时使用的,但是当KerasModelImport仅具有静态方法时,无论如何都看不到设置allowNoOutputs。
答案 0 :(得分:0)
Keras模型是顺序模型吗?还是模特?如果是顺序的,请使用KerasModelImport.importKerasSequentialModelAndWeights()
。
答案 1 :(得分:0)
您可以尝试use Deep Java Library。这是有关how to load Keras model into DJL的文档。
您可以找到示例项目here。