如何使用多个输入测试Tensorflowlite模型?

时间:2018-11-18 03:39:53

标签: android tensorflow keras tensorflow-lite

我创建了一个简单的MLP回归Keras模型,其中包含4个输入和一个输出。我将这个模型转换为TFlite,现在我正试图找出如何在android studio上对其进行测试。如何输入多个4D对象进行Java测试? 尝试运行模型时,以下给出错误:

try{
            tflite = new Interpreter(loadModelFile());
        }
        catch(Exception ex){
            ex.printStackTrace();
        }   

double[][] inp= new double[1][4];
    inp[0][1]= 0;
    inp[0][0] = 0;
    inp[0][2]= 0;
    inp[0][3]=-2.01616982303105;

    double[] output = new double[100];

    tflite.run(inp,output);

编辑: 这是我最初创建的模型:

# create model
model = Sequential()
model.add(Dense(50, activation="tanh", input_dim=4, 
kernel_initializer="random_uniform", name="input_tensor"))
model.add(Dense(50, activation="tanh", 
kernel_initializer="random_uniform"))
model.add(Dense(1, activation="linear", 
kernel_initializer='random_uniform', name="output_tensor"))

2 个答案:

答案 0 :(得分:0)

如果输入实际上是4个独立的张量,则应使用Interpreter.runForMultipleInputsAndOutputs API,该API允许多个独立的输入。另请参阅TensorFlow Lite储存库中的this example。例如:

double[] input0 = {...};
double[] input1 = {...};
Object[] inputs = {input0, input1};
double[] output = new double[100];
Map<Integer, Object> outputs = new HashMap<>();
outputs.put(0, output);
interpreter.runForMultipleInputsOutputs(inputs, outputs);

答案 1 :(得分:0)

这是我的代码:

Object[] inputArray = {iArray[0],iArray[1]};
tflite.runForMultipleInputsOutputs(inputArray,outputMap);

第一个对象工作正常。但是在这种情况下,函数中的第二个对象在Tensor getInputTensor(int index)中失败: if(index >= 0 && index < this.inputTensors.length)

但是索引是1。我的代码有问题吗?