InterpreterApi

公用介面 InterpreterApi
已知的間接子類別

TensorFlow Lite 模型解譯器的介面,不含實驗方法。

InterpreterApi 執行個體會封裝預先訓練的 TensorFlow Lite 模型,其中 並執行模型推論

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

try (InterpreterApi interpreter =
     new InterpreterApi.create(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 (InterpreterApi interpreter =
     new InterpreterApi.create(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 (InterpreterApi interpreter =
     new InterpreterApi.create(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) 取得。

警告:InterpreterApi 執行個體並非執行緒安全。

警告:InterpreterApi 執行個體擁有的資源必須 已明確釋出 close()

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

巢狀類別

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

公用方法

抽象 void
allocateTensors()
視需要明確更新所有張量的配置。
抽象 void
close()
釋出與 InterpreterApi 執行個體相關聯的資源。
靜態 InterpreterApi
create(「File」 modelFile、「digerApi.Options」InterpreterApi.Options選項)
使用指定的模型和選項建構 InterpreterApi 例項。
靜態 InterpreterApi
create(ByteBuffer byteBuffer、InterpreterApi.Options 選項)
使用指定的模型和選項建構 InterpreterApi 例項。
抽象 攔截
getInputIndex(String opName)
根據輸入的運算名稱取得輸入的索引。
抽象 Tensor
getInputTensor(int inputIndex)
取得與所提供輸入索引相關聯的 Tensor。
抽象 攔截
getInputTensorCount()
取得輸入張量。
抽象
getLastNativeInferenceDurationNanoseconds()
傳回原生推論時間。
抽象 攔截
getOutputIndex(String opName)
根據輸出的運算名稱取得輸出索引。
抽象 Tensor
getOutputTensor(int outputIndex)
取得與提供的輸出索引相關聯的 Tensor。
抽象 攔截
getOutputTensorCount()
取得輸出 Tensor 的數量。
抽象 void
resizeInput(int idx, int[] dims, boolean strict)
將原生模型輸入值的 idx 值調整為指定的亮度。
抽象 void
resizeInput(int idx, int[] 調暗)
將原生模型輸入值的 idx 值調整為指定的亮度。
抽象 void
run(物件輸入內容、物件輸出)
如果模型僅接受一項輸入內容,則執行模型推論,且僅提供一項輸出內容。
抽象 void
runForMultipleInputsOutputs(Object[] 輸入, Map<IntegerObject> 輸出)
如果模型有多項輸入內容,或傳回多項輸出內容,就會執行模型推論。

繼承的方法