Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的Tensorflow:java.nio.BufferOverFlowException_Java_Android_Tensorflow - Fatal编程技术网

Android中的Tensorflow:java.nio.BufferOverFlowException

Android中的Tensorflow:java.nio.BufferOverFlowException,java,android,tensorflow,Java,Android,Tensorflow,早上好。我是一名试图将tensorflow模型植入Android的开发者。 我在尝试修复多个错误时遇到了一个以前从未见过的错误。 我现在面临的java.nio.BufferOverFlowException错误是,它以前没有发生过,但发生得很突然。 我的代码使用字节数组,但我无法指定问题出在哪一部分 此源接受一个浮点数组作为输入,并在通过模型后返回一个包含10个类的数组。 返回的值具有softmax值 public float[] hypothesis(float[] inputFloats,

早上好。我是一名试图将tensorflow模型植入Android的开发者。 我在尝试修复多个错误时遇到了一个以前从未见过的错误。 我现在面临的
java.nio.BufferOverFlowException
错误是,它以前没有发生过,但发生得很突然。 我的代码使用字节数组,但我无法指定问题出在哪一部分

此源接受一个浮点数组作为输入,并在通过模型后返回一个包含10个类的数组。 返回的值具有softmax值

public float[] hypothesis(float[] inputFloats, int nFeatures, int nClasses, Context context)
{
    try {
        int nInstance = inputFloats.length / nFeatures;
       // FloatBuffer.wrap(inputFloats);
        Toast.makeText(context, "", Toast.LENGTH_LONG).show();
        inferenceInterface.feed(INPUT_NODE, FloatBuffer.wrap(inputFloats), INPUT_SIZE);
        inferenceInterface.run(OUTPUT_NODES_HYPO);
        float[] result = new float[nInstance * nClasses];
        inferenceInterface.fetch(OUTPUT_NODE_HYPO, result);
        return result;
    }
    catch(Exception e){
        Toast.makeText(context, e+" ...", Toast.LENGTH_LONG).show();
        return null;
    }
}
inputfloats
的长度为720,
nFeatures
的长度为720<代码>nClasses为10。 虽然该值不正确,但它以前工作过。 catch语句中的e打印
java.nio.BufferOverFlowException

在将字节数组转换成浮点数组的过程中会出现问题吗? 相关来源

public float[] bytetofloat(byte[] array){
    int[] returnArr = new int[array.length/4];
    float[] returnArr1 = new float[array.length/4];
    for(int i = 0 ; i < returnArr.length; i++){
        //array[i] = 0;
        returnArr[i] = array[i*4] & 0xFF;
        if(returnArr[i] < 0 || returnArr[i]>255)
            Log.d("ARRAY", returnArr[i]+" ");
        returnArr1[i] = (float)returnArr[i];
    }
    return returnArr1;
}
关于MainActivity.java:69

byte[] byteArrayRes = bitmapToByteArray(image_bitmap);
float[] inputArray = bytetofloat(byteArrayRes);

activityPrediction(inputArray);
MainActivity.java:28

public class MainActivity extends AppCompatActivity {
MainActivity.java:148

float[] result = activityInference.hypothesis(inputArray, 20*36, 10, getApplicationContext());
关于ActivityEnference.java:58

float[] result = new float[nInstance * nClasses];
inferenceInterface.fetch(OUTPUT_NODE_HYPO, result);

您能获得stacktrace吗?我包括stacktrace:)看起来问题与输入图像分辨率有关。这个链接可能有用:thx我会试试这个
public class MainActivity extends AppCompatActivity {
float[] result = activityInference.hypothesis(inputArray, 20*36, 10, getApplicationContext());
float[] result = new float[nInstance * nClasses];
inferenceInterface.fetch(OUTPUT_NODE_HYPO, result);