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