Interpreter

公開最終課 翻譯模式

使用 TensorFlow Lite 提升模型推論能力的驅動程式類別。

注意:如果您不需要任何「實驗功能」的存取權API 功能,建議使用 TranslateerApi 和 TranslateerFactory,不要直接使用 Translateer

Interpreter 包含預先訓練的 TensorFlow Lite 模型,其中可進行運算 來執行模型推論

舉例來說,如果模型只接收一個輸入內容,且只會傳回一個輸出內容:

try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.run(input, output);
 }
 

如果模型接受多項輸入或輸出內容:

Object[] inputs = {input0, input1, ...};
 Map<Integer, Object> map_of_indices_to_outputs = new HashMap<>();
 FloatBuffer ith_output = FloatBuffer.allocateDirect(3 * 2 * 4);  // Float tensor, shape 3x2x4.
 ith_output.order(ByteOrder.nativeOrder());
 map_of_indices_to_outputs.put(i, ith_output);
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(inputs, map_of_indices_to_outputs);
 }
 

如果模型使用或產生字串張量:

String[] input = {"foo", "bar"};  // Input tensor shape is [2].
 String[][] output = new String[3][2];  // Output tensor shape is [3, 2].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, output);
 }
 

請注意,形狀 [] 和形狀 [1] 兩者不同。適用於純量字串張量 輸出:

String[] input = {"foo"};  // Input tensor shape is [1].
 ByteBuffer outputBuffer = ByteBuffer.allocate(OUTPUT_BYTES_SIZE);  // Output tensor shape is [].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, outputBuffer);
 }
 byte[] outputBytes = new byte[outputBuffer.remaining()];
 outputBuffer.get(outputBytes);
 // Below, the `charset` can be StandardCharsets.UTF_8.
 String output = new String(outputBytes, charset);
 

將 TensorFlow 模型轉換為 TensorFlowLite 時,系統會決定輸入和輸出的順序 和輸入內容的預設形狀一樣

如果以 (多維度) 陣列提供輸入內容,相應的輸入張量 會根據該陣列的形狀,以隱含方式調整大小。如果輸入內容是 Buffer 不會進行隱式調整大小呼叫端必須確保 Buffer 位元組大小 與對應張量的相符,或者首次透過 resizeInput(int, int[]) 調整張量Tensor 形狀和類型資訊可透過 Tensor 類別取得,可透過 getInputTensor(int)getOutputTensor(int) 取得。

警告:Interpreter 執行個體並非執行緒安全。Interpreter 擁有透過叫用 close() 時「必須」明確釋出的資源

TFLite 程式庫是以 NDK API 19 為基礎建構而成。可能適用於低於 19 的 Android API 級別 但不保證一定如此

巢狀類別

類別 Interpreter.Options 用於控制執行階段解譯器行為的選項類別。

公用建構函式

解譯器(檔案 modelFile)
初始化 Interpreter
解譯器(「File」 modelFile、「Translateer.Options」Interpreter.Options選項)
初始化 Interpreter 並指定自訂解譯器行為的選項。
解譯器(ByteBuffer byteBuffer)
使用模型檔案的 ByteBuffer 初始化 Interpreter
解譯器(ByteBuffer byteBuffer、Interpreter.Options 選項)
使用模型檔案的 ByteBuffer 和一組模型檔案,初始化 Interpreter 自訂 Interpreter.Options

公用方法

void
allocateTensors()
視需要明確更新所有張量的配置。
void
close()
釋出與 InterpreterApi 執行個體相關聯的資源。
攔截
getInputIndex(String opName)
根據輸入的運算名稱取得輸入的索引。
Tensor
getInputTensor(int inputIndex)
取得與所提供輸入索引相關聯的 Tensor。
攔截
getInputTensorCount()
取得輸入張量。
Tensor
getInputTensorFromSignature(String inputName, StringSignatureKey)
取得與所提供輸入名稱和簽章方法名稱相關聯的 Tensor。
getLastNativeInferenceDurationNanoseconds()
傳回原生推論時間。
攔截
getOutputIndex(String opName)
根據輸出的運算名稱取得輸出索引。
Tensor
getOutputTensor(int outputIndex)
取得與提供的輸出索引相關聯的 Tensor。
攔截
getOutputTensorCount()
取得輸出 Tensor 的數量。
Tensor
getOutputTensorFromSignature(String outputName, StringSignatureKey)
取得與特定簽署方法中所提供輸出名稱相關聯的 Tensor。
String[]
getSignatureInputs(字串signKey)
取得方法 signatureKey 的 SignatureDefs 輸入內容清單。
String[]
getSignatureKeys()
取得模型中可用的 SignatureDef 匯出方法名稱清單。
String[]
getSignatureOutputs(字串signKey)
取得方法