此页面由 Cloud Translation API 翻译。
Switch to English

tf.lite.Interpreter

TensorFlow 1版本 在GitHub上查看源代码

TensorFlow Lite模型的解释器界面。

用于笔记本

在指南中使用在教程中使用

这使得TensorFlow Lite解释器可以在Python中访问。可以在多线程Python环境中使用此解释器,但是您必须确保一次仅从一个线程调用特定实例的函数。因此,如果要让4个线程同时运行不同的推理,请为每个线程创建一个解释器,作为线程本地数据。同样,如果要在单个解释器的一个线程中调用invoke(),但一旦完成就想在另一个线程上使用tensor(),则必须在线程之间使用同步原语以确保调用tensor()之前已返回调用)。

model_path TF-Lite Flatbuffer文件的路径。
model_content 模型的内容。
experimental_delegates 实验性的。可调整的。 lite.load_delegate()返回的TfLiteDelegate对象的列表。
num_threads 设置解释器使用的且可用于CPU内核的线程数。如果未设置,则解释器将使用与实现相关的默认线程数。当前,只有一部分内核(例如conv)支持多线程。

ValueError 如果解释器无法创建。

方法

allocate_tensors

查看资料

get_input_details

查看资料

获取模型输入详细信息。

退货
输入详细信息列表。

get_output_details

查看资料

获取模型输出详细信息。

退货
输出详细信息列表。

get_tensor

查看资料

获取输入张量的值(获取副本)。

如果您希望避免复制,请使用tensor() 。此功能不能用于读取中间结果。

精氨酸
tensor_index 张量的张量指数得到。此值可以从get_output_details中的“索引”字段获得。

退货
一个numpy数组。

get_tensor_details

查看资料

获取具有有效张量详细信息的每个张量的张量详细信息。

未找到有关张量的所需信息的张量不会添加到列表中。这包括没有名称的临时张量。

退货
包含张量信息的字典列表。

invoke

查看资料

调用口译员。

在调用之前,请确保设置输入大小,分配张量和填充值。另外,请注意,此函数会释放GIL,因此可以在继续执行Python解释器的同时在后台执行大量计算。 invoke()调用尚未完成时,不应调用此对象上的其他任何函数。

加薪
ValueError 当基础解释器失败时,引发ValueError。

reset_all_variables

查看资料

resize_tensor_input

查看资料

调整输入张量的大小。

 interpreter = Interpreter(model_content=tflite_model)
interpreter.resize_tensor_input(0, [1, 224, 224, 3], strict=True)
interpreter.allocate_tensors()
interpreter.invoke()
 

精氨酸
input_index 要设置的输入的张量索引。可以从get_input_details中的“索引”字段获取此值。
tensor_size tensor_shape用于调整输入的大小。
strict strict为True时,仅未知尺寸可以调整大小。在给定张量的shape_signature属性中,未知尺寸以-1表示。 (默认为False)

加薪
ValueError 如果解释器无法调整输入张量的大小。

set_tensor

查看资料

设置输入张量的值。

请注意,这会复制value数据。

如果要避免复制,可以使用tensor()函数获取一个numpy缓冲区,该缓冲区指向tflite解释器中的输入缓冲区。

精氨酸
tensor_index 要设置的张量的张量索引。可以从get_input_details中的“索引”字段获取此值。
value 要设置的张量值。

加薪
ValueError 如果解释器无法设置张量。

tensor

查看资料

返回提供当前张量缓冲区的numpy视图的函数。

这允许在没有张量的情况下读写该张量。这更紧密地反映了C ++ Interpreter类接口的tensor()成员,因此而得名。注意不要通过调用allocate_tensors()invoke()来保存这些输出引用。此功能不能用于读取中间结果。

用法:

 interpreter.allocate_tensors()
input = interpreter.tensor(interpreter.get_input_details()[0]["index"])
output = interpreter.tensor(interpreter.get_output_details()[0]["index"])
for i in range(10):
  input().fill(3.)
  interpreter.invoke()
  print("inference %s" % output())
 

请注意,此函数如何避免直接创建numpy数组。这是因为重要的是,对数据保留的实际numpy视图的时间不要超过必要的时间。如果这样做,则解释器将不再被调用,因为解释器可能会调整大小并使引用的张量无效。 NumPy API不允许基础缓冲区发生任何可变性。

错误:

 input = interpreter.tensor(interpreter.get_input_details()[0]["index"])()
output = interpreter.tensor(interpreter.get_output_details()[0]["index"])()
interpreter.allocate_tensors()  # This will throw RuntimeError
for i in range(10):
  input.fill(3.)
  interpreter.invoke()  # this will throw RuntimeError since input,output
 

精氨酸
tensor_index 张量的张量指数得到。此值可以从get_output_details中的“索引”字段获得。

退货
该函数可以随时返回指向内部TFLite张量状态的新numpy数组。永久保留该函数是安全的,但永久保留numpy数组并不安全。