桥接Knime,Keras和DL4J –加载h5模型时的例外情况

时间:2020-05-09 20:22:27

标签: keras deeplearning4j knime dl4j

我正在研究一个项目,该项目需要训练DNN,然后在Java环境中运行训练后的模型。由于训练数据需要大量的操作,因此我使用Knime及其Keras库来完成大部分工作,并将训练后的模型导出到Keras h5文件中,该文件可以加载到DL4J中(我正在使用Knime Keras Integration 4.1.0v201911171432和DL4J 1.0.0-beta6)。

建模正在进行中,但是对于POC,我通过链接以下节点创建了一个网络:

  • Keras输入层(形状144)
  • Keras致密层(单位500)
  • Keras密集层(单位500)
  • Keras致密层(第1单元)
  • Keras设置输出图层(指向最后一层的单个输出形状[1])

然后使用“ 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。

2 个答案:

答案 0 :(得分:0)

Keras模型是顺序模型吗?还是模特?如果是顺序的,请使用KerasModelImport.importKerasSequentialModelAndWeights()

答案 1 :(得分:0)

您可以尝试use Deep Java Library。这是有关how to load Keras model into DJL的文档。

您可以找到示例项目here