Java不兼容的类型错误

时间:2018-02-24 23:24:14

标签: java tensorflow incompatibletypeerror

以下代码是使用Tensorflow库通过初始v3模型进行预测的java程序的一部分。

private static float[] executeInceptionGraph(byte[] graphDef, Tensor image) {
    try (Graph g = new Graph()) {
        g.importGraphDef(graphDef);
        try (Session s = new Session(g);
                Tensor result = s.runner().feed("DecodeJpeg/contents", image).fetch("softmax").run().get(0)) {
            final long[] rshape = result.shape();
            if (result.numDimensions() != 2 || rshape[0] != 1)
            {
                throw new RuntimeException(
                        String.format(
                                "Expected model to produce a [1 N] shaped tensor where N is the number of labels, instead it produced one with shape %s",
                                Arrays.toString(rshape)));
            }
            int nlabels = (int) rshape[1];

            return result.copyTo(new float[1][nlabels])[0];
        }
    }
}

但是,return语句显示错误:

incompatable types, required:float,found:Object.

我尝试将类型转换为float [],但这给了我一个运行时错误"Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [[F cannot be cast to [F".

我从https://github.com/emara-geek/object-recognition-tensorflow

下载了该程序

我正在使用IntelliJ IDE。我应该改变什么?

2 个答案:

答案 0 :(得分:0)

您提供的代码与您复制的代码不符。源代码是:

return result.copyTo(new float[1][nlabels])[0];

删除了一个级别的数组......这解释了你看到的错误。

答案 1 :(得分:0)

好的,我想出来了。回复以下内容

result.copyTo(new float[1][nlabels])[0];

以下内容:

            float[][] res = new float[1][nlabels];

            result.copyTo(res);

            return res[0];

也许第一行代码适用于代码作者使用的版本,但我无法确定。第二组代码适用于java vesion 7。