Java 将Python 2D ndarray加载到Android中,以便在TFLite上进行推理

Java 将Python 2D ndarray加载到Android中,以便在TFLite上进行推理,java,python,android,tensorflow,tensorflow-lite,Java,Python,Android,Tensorflow,Tensorflow Lite,我想在加载到Android项目中的TensorFlow Lite模型上测试推断 我有一些在Python环境中生成的输入,我想保存到一个文件中,加载到我的Android应用程序中,并用于TFLite推断。我的输入有点大,一个例子是: ,数据类型:float32,形状:(1596,80) 我需要一些方法来序列化这个ndarray并将其加载到Android中 可以找到有关TFLite推断的更多信息。本质上,这应该是一个基本浮点的多维数组,或者一个字节缓冲 最简单的方法是什么: 在Python端序列化

我想在加载到Android项目中的TensorFlow Lite模型上测试推断

我有一些在Python环境中生成的输入,我想保存到一个文件中,加载到我的Android应用程序中,并用于TFLite推断。我的输入有点大,一个例子是:

,数据类型:float32,形状:(1596,80)

我需要一些方法来序列化这个ndarray并将其加载到Android中

可以找到有关TFLite推断的更多信息。本质上,这应该是一个基本浮点的多维数组,或者一个字节缓冲

最简单的方法是什么:

  • 在Python端序列化此数据数组
  • 在Java端从文件中反序列化此blob

谢谢

我最终发现了这一点,有一个方便的Java库,名为,它允许您用Java打开.npy文件,因此也可以使用Android

在Python端,我以正常方式保存了一个展平的
.npy

data\u flat=data.flant()
打印(数据平面形状)
np.save(file=“data.npy”,arr=data\u平面)
在Android中,我将其放入
assets
文件夹中

然后我将其加载到JavaNpy中:

InputStream=context.getAssets().open(“data.npy”)
Npy Npy=新的Npy(流);
float[]npyData=npy.floateElements();
最后把它变成了张紧缓冲垫:

int[]inputShape=newint[]{1596,80}//在我将其展平之前,请先查看数据形状
TensorBuffer TensorBuffer=TensorBuffer.createFixedSize(inputShape,DataType.FLOAT32);
加载数组(npyData);

然后,我使用这个tensorBuffer在我的TFLite模型上进行推理。

我倾向于将2D数组展平为1D数组,然后使用协议缓冲区对其进行序列化,然后在Java端重新创建数组形状,但这似乎有点过分。你的目的是什么?你想测试java端代码,包括推断还是tflite模型?本质上,我的问题是,我试图调试奇怪的行为,因为我的tflite模型在Android上的准确性比在Windows上差得多。出于这个原因,我想在TFLite模型上进行推断,在Windows和Android上使用完全相同的输入,以查看结果是否匹配(它们应该匹配)。我没有尝试过,但看起来合法:文件或纯文本。如果您不想弄乱android文件系统,请将数据放入资产中。另一个选择是使用相同的输出生成两个相等的数据生成器:这对于测试预处理非常方便