我正在学习Tensorflow,并按照教程进行了学习,可以制作一个自定义模型以在Android App中运行它,但是我遇到了问题。我有以下代码:

    public void testModel(Context ctx) {
        String model_file = "file:///android_asset/model_graph.pb";
        int[] result = new int[2];
        float[] input = new float[]{0.0F, 1.0F, 0.0F, 1.0F, 1.0F, 0.0F, 0.0F, 1.0F, 0.0F, 1.0F, 0.0F, 1.0F, 0.0F, 1.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.0F, 1.0F, 0.0F, 1.0F, 0.0F, 1.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F, 1.0F, 0.0F, 1.0F, 0.0F, 1.0F, 1.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 1.0F, 0.0F, 1.0F, 1.0F, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 1.0F, 0.0F, 1.0F, 0.0F, 1.0F, 0.0F};
        TensorFlowInferenceInterface inferenceInterface;
        inferenceInterface = new TensorFlowInferenceInterface(ctx.getAssets(), model_file);
        inferenceInterface.feed("input", input, 68);
        inferenceInterface.run(new String[]{"output"});
        inferenceInterface.fetch("output", result);
        Log.v(TAG, Arrays.toString(result));
    }


当应用尝试运行inferenceInterface.run(new String[]{"output"})方法时出现错误:

java.lang.IllegalArgumentException: In[0] is not a matrix
[[Node: MatMul = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/device:CPU:0"](_arg_input_0_0, W1)]]


我不认为我创建的模型是问题所在,因为我能够在Python代码中使用它并获得了积极的结果。

最佳答案

从错误消息(In[0] is not a matrix)中可以看出,当您要为68个元素提供一维张量(向量)时,您的模型需要输入为矩阵(即二维张量)。

特别是,dimsTensorFlowInferenceInterface.feed参数在该行中似乎不正确:

inferenceInterface.feed("input", input, 68);


相反,它应该类似于:

inferenceInterface.feed("input", input, 68, 1);


如果您的模型期望使用68x1的矩阵(或者34, 2如果期望使用34x2的矩阵,则使用17, 4进行17x4矩阵等)。

希望能有所帮助。

07-24 09:53
查看更多