Python 如何在脚本中加载tflite模型?

Python 如何在脚本中加载tflite模型?,python,tensorflow,tensorflow-lite,Python,Tensorflow,Tensorflow Lite,我已使用bazel将.pb文件转换为tflite文件。现在我想在我的python脚本中加载这个tflite模型,只是为了测试它是否提供了正确的输出?您可以使用TensorFlow-Lite-python解释器在python shell中加载tflite模型,并使用输入数据进行测试 代码如下所示: 将numpy导入为np 导入tensorflow作为tf #加载TFLite模型并分配张量。 解释器=tf.lite.解释器(model\u path=“converted\u model.tflite

我已使用bazel
.pb
文件转换为
tflite
文件。现在我想在我的python脚本中加载这个
tflite
模型,只是为了测试它是否提供了正确的输出?

您可以使用TensorFlow-Lite-python解释器在python shell中加载tflite模型,并使用输入数据进行测试

代码如下所示:

将numpy导入为np
导入tensorflow作为tf
#加载TFLite模型并分配张量。
解释器=tf.lite.解释器(model\u path=“converted\u model.tflite”)
解释器。分配_张量()
#获取输入和输出张量。
input\u details=解释器。获取\u input\u details()
output\u details=解释器。获取\u output\u details()
#随机输入数据的测试模型。
input_shape=输入_详细信息[0]['shape']
input\u data=np.array(np.random.random\u sample(input\u shape),dtype=np.float32)
解释器。设置解释器张量(输入解释器详细信息[0]['index'],输入解释器数据)
invoke()解释器
#函数“get_tensor()”返回张量数据的副本。
#使用'tensor()`获取指向该张量的指针。
输出数据=解释器。获取张量(输出详细信息[0]['index'])
打印(输出数据)
以上代码来自TensorFlow Lite官方指南,有关详细信息,请阅读。

在Python中使用TensorFlow Lite模型: TensorFlow Lite的冗长功能非常强大,因为它允许您进行更多的控制,但在许多情况下,您只想传递输入并获得输出,因此我创建了一个类来包装此逻辑:

以下内容适用于tfhub.dev中的分类模型,例如:

#用法
模型=TensorflowLiteClassificationModel(“path/to/model.tflite”)
(标签,概率)=模型。从文件路径(“path/to/image.jpeg”)运行文件
将tensorflow导入为tf
将numpy作为np导入
从PIL导入图像
类TensorFlowLiterationModel:
def uuu init uuuuu(自、模型路径、标签、图像大小=224):
self.interpreter=tf.lite.interpreter(model\u path=model\u path)
self.explorer.allocate_tensors()
self.\u input\u details=self.interpreter.get\u input\u details()
self.\u output\u details=self.interpreter.get\u output\u details()
self.labels=标签
self.image\u size=图像大小
def从文件路径(自身、图像路径)运行文件:
输入\数据\类型=自身。\输入\详细信息[0][“数据类型”]
image=np.array(image.open(image\u path)。调整大小((self.image\u size,self.image\u size)),dtype=input\u data\u type)
如果输入数据类型==np.float32:
image=image/255。
如果image.shape==(1224224):
图像=np.堆栈(图像*3,轴=0)
返回self.run(图)
def运行(自我,图像):
"""
args:
图像:一个(1,图像大小,图像大小,3)np数组
返回列表类型的[Label,Probability]列表
"""
self.interpreter.set_张量(self._输入_详细信息[0][“索引”],图像)
self.interpreter.invoke()
tflite\u解释器\u输出=self.interpreter.get\u张量(self.\u输出\u详细信息[0][“索引”])
概率=np.数组(tflite\u解释器\u输出[0])
#创建[“标签”,概率],有序递减概率的列表
标签到概率=[]
对于i,枚举中的概率(概率):
标签到概率。追加([self.labels[i],float(概率)])
返回排序(标签概率,key=lambda元素:元素[1])
小心 但是,您需要修改它以支持不同的用例,因为我将图像作为输入传递,并获得分类([label,probability])输出。如果您需要文本输入(NLP)或其他输出(对象检测输出边界框、标签和概率)、分类(仅标签)等)


此外,如果需要不同大小的图像输入,则必须更改输入大小并重新分配模型(
self.interpreter.allocate_tensors()
)。这很慢(低效)。最好使用平台调整大小功能(例如Android图形库),而不是使用TensorFlow lite模型来调整大小。或者,您可以使用一个单独的模型来调整模型的大小,该模型可以更快地分配张量()。

使用了哪个tensorflow版本?解释器现在不存在。正如我刚刚用tensorflow 1.14.0测试的一样,tflite解释器已经从tf.contrib.lite.translator移到了tf.lite.translator,请参见上面我的更新答案。这真的很棒。我修改了该文件以实际测试图像,我发现我的.tflite文件一定是无效的。如果你熟悉目标检测,你能检查一下吗?如何测试而不是测试数据上的随机数据我们如何对所有数据集进行预测?比如“预测(x_测试)”?