TensorFlow函數(shù)教程:tf.lite.Interpreter

2019-04-03 14:55 更新

tf.lite.Interpreter函數(shù)

Interpreter

別名:>

  • 類 tf.contrib.lite.Interpreter
  • 類 tf.lite.Interpreter

定義在:tensorflow/lite/python/interpreter.py。

TF-Lite模型的解釋器推理。

__init__
__init__(
    model_path=None,
    model_content=None
)

構(gòu)造函數(shù)。

參數(shù):

  • model_path:TF-Lite Flatbuffer文件的路徑。
  • model_content:模型的內(nèi)容。

可能引發(fā)的異常:

  • ValueError:如果解釋器無法創(chuàng)建。

方法

allocate_tensors
allocate_tensors()
get_input_details
get_input_details()

獲取模型輸入詳細(xì)信息。

返回:

輸入詳細(xì)信息列表。

get_output_details
get_output_details()

獲取模型輸出詳細(xì)信息

返回:

輸出詳細(xì)信息列表。

get_tensor
get_tensor(tensor_index)

獲取輸入張量的值(獲取副本)。

如果您想避免復(fù)制,請(qǐng)使用tensor()。

參數(shù):

  • tensor_index:得到張量的張量指數(shù)。該值可以從get_output_details中的'index'字段獲得。

返回:

一個(gè)numpy數(shù)組。

get_tensor_details
get_tensor_details()

獲取具有有效張量詳細(xì)信息的每個(gè)張量的張量詳細(xì)信息。

未找到有關(guān)張量的所需信息的張量不會(huì)添加到列表中。這包括沒有名字的臨時(shí)張量。

返回:

包含張量信息的詞典列表。

invoke
invoke()

調(diào)用解釋器。

在調(diào)用之前,請(qǐng)務(wù)必設(shè)置輸入大小,分配張量和填充值。

可能引發(fā)的異常:

  • ValueError:當(dāng)?shù)讓咏忉屍魇r(shí)引發(fā)ValueError。
reset_all_variables
reset_all_variables()
resize_tensor_input
resize_tensor_input(
    input_index,
    tensor_size
)

調(diào)整輸入張量的大小。

參數(shù):

  • input_index:要設(shè)置的輸入的張量索引。該值可以從get_input_details中的'index'字段獲得。
  • tensor_size:tensor_shape調(diào)整輸入的大小。

可能引發(fā)的異常:

  • ValueError:如果解釋器無法調(diào)整輸入張量的大小。
set_tensor
set_tensor(
    tensor_index,
    value
)

設(shè)置輸入張量的值。請(qǐng)注意,這將復(fù)制value的數(shù)據(jù)。

如果要避免復(fù)制,可以使用該tensor()函數(shù)獲取指向tflite解釋器中輸入緩沖區(qū)的numpy緩沖區(qū)。

參數(shù):

  • tensor_index:設(shè)置的張量的張量指數(shù)。該值可以從get_input_details中的'index'字段獲得。
  • value:張量值設(shè)置。

可能引發(fā)的異常:

  • ValueError:如果解釋器無法設(shè)置張量。
tensor
tensor(tensor_index)

返回給出當(dāng)前張量緩沖區(qū)的numpy視圖的函數(shù)。

這允許在沒有副本的情況下讀寫這個(gè)張量。這更接近于C ++ Interpreter類接口的tensor()成員,因此得名。小心不要通過調(diào)用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())

注意這個(gè)函數(shù)如何避免直接生成numpy數(shù)組。將實(shí)際numpy視圖保持到數(shù)據(jù)的時(shí)間不能超過必要的時(shí)間是很重要的。如果你這樣做了,則無法再調(diào)用解釋器,因?yàn)榻忉屍骺赡軙?huì)調(diào)整大小并使引用的張量無效。NumPy API不允許底層緩沖區(qū)的任何可變性。

錯(cuò)誤:

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

參數(shù):

  • tensor_index:得到的張量的張量指數(shù)。該值可以從get_output_details中的'index'字段獲得。

返回:

一個(gè)函數(shù),可以在任何點(diǎn)返回指向內(nèi)部TFLite張量狀態(tài)的新numpy數(shù)組。永久保持該函數(shù)是安全的,但永久保持numpy陣列是不安全的。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)