将keras模型加载到java程序以预测新输入

时间:2018-06-06 13:23:34

标签: java keras

我有这个适用于python的代码

X = numpy.loadtxt("compiledFeatures.csv", delimiter=",")
model = load_model("kerasnaive.h5")
predictions = model.predict(X)

print(predictions);

我试图在java中编写具有相同功能的代码,

我已经编写了这段代码,但它不起作用,任何人都知道我做错了什么,或者还有另一种更简单的方法吗?

代码将转到catch块,在调试代码期间,似乎从模型文件中获取的所有信息都为null

path = String.format("%s\\kerasnaive.h5", System.getProperty("user.dir"), 
pAgents[i]);
try {
     network = KerasModelImport.importKerasModelAndWeights(path, false); 
    }
catch (Exception e){
        System.out.println("cannot build keras layers");
    }

INDArray input = Nd4j.create(1);
input.add(featuresInput);  //an NDarray that i got in the method 

INDArray output = network[i].outputSingle(input);

似乎模型没有构建(网络仍为空) python的代码加载模型并且可以正常工作

在java中我得到错误:“无法确定图层的输出数量:找不到output_dim或nb_filter字段。有关详细信息,请参阅http://deeplearning4j.org/model-import-keras。”

虽然在两个casses中使用相同的文件

谢谢, ORI

1 个答案:

答案 0 :(得分:0)

您当前正在使用importKerasModelAndWeights导入经过训练的keras模型。我不确定您如何训练模型,但是在Keras中有两种可用的模型:Sequential model和使用功能性API的Model class。您可以阅读更多here

如果在创建网络时使用了Sequential model,则需要使用importKerasSequentialModel函数。 Keras Sequential models