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)
取得方法 signatureKey 的 SignatureDefs 輸出內容清單。
void
resetVariableTensors()
進階:將所有變數張量重設為預設值。
void
resizeInput(int idx, int[] dims, boolean strict)
將原生模型輸入值的 idx 值調整為指定的亮度。
void
resizeInput(int idx, int[] 調暗)
將原生模型輸入值的 idx 值調整為指定的亮度。
void
run(物件輸入內容、物件輸出)
如果模型僅接受一項輸入內容,則執行模型推論,且僅提供一項輸出內容。
void
runForMultipleInputsOutputs(Object[] 輸入, Map<IntegerObject> 輸出)
如果模型有多項輸入內容,或傳回多項輸出內容,就會執行模型推論。
void
runSignature(Map<StringObject> input, Map<StringObject> 輸出)
runSignature(Map, Map, String) 相同,但不必傳遞 SignatureKey。 我們會假設模型有一個 SignatureDef
void
runSignature(Map<String, Object> input, Map<String, Object> 輸出、StringsignKey)
根據透過 signatureKey 提供的 SignatureDef 執行模型推論。
void
setCancelled(取消布林值)
進階:在呼叫 run(Object, Object) 時中斷推論。

繼承的方法

公用建構函式

公開 翻譯工具 (檔案 modelFile)

初始化 Interpreter

參數
modelFile 為預先訓練的 TF Lite 模型檔案。
擲回
IllegalArgumentException 如果 modelFile 未將有效的 TensorFlow Lite 編碼 模型

公開 翻譯工具 (「File」modelFile、Interpreter.Options 選項)

初始化 Interpreter 並指定自訂解譯器行為的選項。

參數
modelFile 為預先訓練的 TF Lite 模型檔案
選項 一組自訂翻譯行為的選項
擲回
IllegalArgumentException 如果 modelFile 未將有效的 TensorFlow Lite 編碼 模型

公開 翻譯工具 (ByteBuffer byteBuffer)

使用模型檔案的 ByteBuffer 初始化 Interpreter

建構 Interpreter 後,請勿修改 ByteBuffer。 ByteBuffer 可以是記憶體對應模型檔案的 MappedByteBuffer,也可以是 nativeOrder() 的直接 ByteBuffer,其中包含模型的位元組內容。

參數
byteBuffer
擲回
IllegalArgumentException 如果 byteBuffer 不是 MappedByteBuffer,也不是 nativeOrder 的直接 ByteBuffer

公開 翻譯工具 (ByteBuffer byteBuffer、Interpreter.Options 選項)

使用模型檔案的 ByteBuffer 和一組模型檔案,初始化 Interpreter 自訂 Interpreter.Options

建構 Interpreter 後,請不要修改 ByteBufferByteBuffer 可以是記憶體對映的 MappedByteBuffer 模型檔案,或包含位元組內容的 nativeOrder() 直接 ByteBuffer 模型

參數
byteBuffer
選項
擲回
IllegalArgumentException 如果 byteBuffer 不是 MappedByteBuffer,也不是 nativeOrder 的直接 ByteBuffer

公用方法

公開 void allocateTensors ()

視需要明確更新所有張量的配置。

這會使用輸入值傳播相依張量的形狀和記憶體配置 張量形狀。

注意:這個通話 *完全可以自行選擇是否參加*。Tensor 分配作業會在 (如果任何輸入張量已調整大小,就會執行此動作)。這個呼叫最適合用來判斷 在執行圖形之前任何輸出張量的形狀,例如

 interpreter.resizeInput(0, new int[]{1, 4, 4, 3}));
 interpreter.allocateTensors();
 FloatBuffer input = FloatBuffer.allocate(interpreter.getInputTensor(0).numElements());
 // Populate inputs...
 FloatBuffer output = FloatBuffer.allocate(interpreter.getOutputTensor(0).numElements());
 interpreter.run(input, output)
 // Process outputs...

注意:部分圖形的輸出內容會動態形狀,在這種情況下,輸出內容形狀 直到推論執行完畢為止

公開 void 關閉 ()

釋出與 InterpreterApi 執行個體相關聯的資源。

公開 攔截 getInputIndex (字串 opName)

根據輸入的運算名稱取得輸入的索引。

參數
opName

公開 Tensor getInputTensor (int inputIndex)

取得與所提供輸入索引相關聯的 Tensor。

參數
inputIndex

公開 攔截 getInputTensorCount ()

取得輸入張量。

公開 Tensor getInputTensorFromSignature (字串 inputName、StringSignatureKey)

取得與所提供輸入名稱和簽章方法名稱相關聯的 Tensor。

警告:這是實驗性的 API,因此可能會有變動。

參數
inputName 輸入簽名的名稱。
signatureKey 用於識別 SignatureDef 的簽名金鑰,如果模型有 就能建立同一筆簽名
擲回
IllegalArgumentException 如果 inputNamesignatureKey 為空值或空白, 或提供的名稱無效。

公開 getLastNativeInferenceDurationNanoseconds ()

傳回原生推論時間。

公開 攔截 getOutputIndex (字串 opName)

根據輸出的運算名稱取得輸出索引。

參數
opName

公開 Tensor getOutputTensor (int outputIndex)

取得與提供的輸出索引相關聯的 Tensor。

注意:推斷後才能完整填入輸出張量詳細資料 (例如形狀) 新的執行個體如果您在執行推論「之前」必須「先」更新詳細資料 (例如,調整 輸入張量可能會使輸出張量失效),請使用 allocateTensors() 來 明確觸發配置和形狀傳播作業請注意,如果是具有輸出形狀的圖表, 才會完全決定輸出型態 執行推論

參數
outputIndex

公開 攔截 getOutputTensorCount ()

取得輸出 Tensor 的數量。

公開 Tensor getOutputTensorFromSignature (字串 outputName、StringsignKey)

取得與特定簽署方法中所提供輸出名稱相關聯的 Tensor。

注意:推斷後才能完整填入輸出張量詳細資料 (例如形狀) 新的執行個體如果您在執行推論「之前」必須「先」更新詳細資料 (例如,調整 輸入張量可能會使輸出張量失效),請使用 allocateTensors() 來 明確觸發配置和形狀傳播作業請注意,如果是具有輸出形狀的圖表, 才會完全決定輸出型態 執行推論

警告:這是實驗性的 API,因此可能會有變動。

參數
outputName 簽名中的輸出名稱。
signatureKey 用於識別 SignatureDef 的簽名金鑰,如果模型有 就能建立同一筆簽名
擲回
IllegalArgumentException 如果 outputNamesignatureKey 為空值,或者 空白或提供的名稱無效。

公開 String[] getSignatureInputs (字串SignatureKey)

取得方法 signatureKey 的 SignatureDefs 輸入內容清單。

警告:這是實驗性的 API,因此可能會有變動。

參數
signatureKey

公開 String[] getSignatureKeys ()

取得模型中可用的 SignatureDef 匯出方法名稱清單。

警告:這是實驗性的 API,因此可能會有變動。

公開 String[] getSignatureOutputs (字串SignatureKey)

取得方法 signatureKey 的 SignatureDefs 輸出內容清單。

警告:這是實驗性的 API,因此可能會有變動。

參數
signatureKey

公開 void resetVariableTensors ()

進階:將所有變數張量重設為預設值。

如果變數張量沒有相關聯的緩衝區,將重設為零。

警告:這是實驗性的 API,因此可能會有變動。

公開 void resizeInput (int idx, int[] 港式、布林嚴格)

將原生模型輸入值的 idx 值調整為指定的亮度。

當「strict」為 True 時,只能調整不明尺寸的大小。未知的維度為 在 `Tensor.shapeSignature()` 傳回的陣列中以 `-1` 表示。

參數
IDX
調暗
嚴格篩選

公開 void resizeInput (int idx, int[] 調暗螢幕)

將原生模型輸入值的 idx 值調整為指定的亮度。

參數
IDX
調暗

公開 void run (「物件」輸入、物件輸出)

如果模型僅接受一項輸入內容,則執行模型推論,且僅提供一項輸出內容。

警告:如果 Buffer (最好直接,但並非必要),則 API 效率會更高 做為輸入/輸出資料類型請考慮使用「Buffer」動態饋給及擷取 原始資料。以下是具體的 Buffer 類型 支援:

  • ByteBuffer - 與任何基礎基本 Tensor 類型相容。
  • FloatBuffer - 與浮點張量相容。
  • IntBuffer - 與 int32 Tensor 相容。
  • LongBuffer - 與 int64 Tensor 相容。
,瞭解如何調查及移除這項存取權。 請注意,布林類型可以當做陣列,不支援 Buffer 或純量輸入。

參數
輸入 陣列或多維陣列,或原始類型的 Buffer 包括 int、float、long 和 byteBuffer這是傳送大型文件的偏好方法 適用於原始類型的輸入資料,但字串型別需要使用 (多維度) 陣列輸入路徑使用 Buffer 時,其內容會維持不變,直到 整個模型推論完畢,而呼叫端必須確保 Buffer 位於 適當的閱讀位置只有在呼叫端使用 null 的情況下, Delegate,允許緩衝區處理互通性,且這類緩衝區已繫結至 輸入 Tensor
output 輸出資料的多維度陣列,或原始類型的 Buffer 包括 int、float、long 和 byte使用 Buffer 時,呼叫端必須確保 即可設定適當的寫入位置允許空值;適用於 在某些情況下,例如呼叫端使用允許緩衝區控制的 Delegate 時 互通性,且這類緩衝區已繫結至輸出 Tensor (另請參閱 Interpreter.Options#setAllowBufferHandleOutput(boolean)), 或者如果圖形有動態形狀的輸出內容,且呼叫端必須在推論叫用後查詢輸出 Tensor 形狀,以便直接從輸出結果擷取資料 Tensoror (透過 Tensor.asReadOnlyBuffer())。

公開 void runForMultipleInputsOutputs (Object[] 輸入、Map<Integer物件> 輸出)

如果模型有多項輸入內容,或傳回多項輸出內容,就會執行模型推論。

警告:如果 Buffer (最好直接,但並非必要),則 API 的效率會更高 做為輸入/輸出資料類型請考慮使用「Buffer」動態饋給及擷取 原始資料。以下是具體的 Buffer 類型 支援:

  • ByteBuffer - 與任何基礎基本 Tensor 類型相容。
  • FloatBuffer - 與浮點張量相容。
  • IntBuffer - 與 int32 Tensor 相容。
  • LongBuffer - 與 int64 Tensor 相容。
,瞭解如何調查及移除這項存取權。 請注意,布林類型可以當做陣列,不支援 Buffer 或純量輸入。

注意:inputsoutputs 個別元素的 null 值是 只有在呼叫端使用允許緩衝區處理互通性的 Delegate 時,才會允許這個情況;且 這類緩衝區已繫結至對應的輸入或輸出 Tensor

參數
輸入來源 輸入資料陣列。輸入內容的順序應與 模型每項輸入可以是陣列或多維陣列,也可以是 Buffer 基本型別,包括 int、float、long 和 byte。建議將路線設為 Buffer 傳遞大型輸入資料,但字串類型需要使用 (多維度) 陣列 輸入路徑使用 Buffer 時,在模型前,其內容應維持不變 且呼叫端必須確保 Buffer 處於適當狀態, 讀取位置。
輸出內容 對應輸出索引與輸出資料的多維陣列,或原始類型的 Buffer,包括 int、浮點值、長型和位元組。這麼一來 項目。使用 Buffer 時,呼叫端必須確保 即可設定適當的寫入位置在下列情況中,地圖可能會空白 緩衝區控制代碼用於輸出張量資料,或將輸出內容動態產生 形狀,而呼叫端必須在推論後查詢 Tensor 形狀 即可直接從輸出張量 (透過 Tensor.asReadOnlyBuffer()) 擷取資料。

公開 void runSignature (地圖<字串, 物件> 輸入、地圖<字串物件> 輸出)

runSignature(Map, Map, String) 相同,但不必傳遞 SignatureKey。 我們會假設模型有一個 SignatureDef如果模型有多個 SignatureDef 模型, 擲回例外狀況

警告:這是實驗性的 API,因此可能會有變動。

參數
輸入來源
輸出內容

公開 void runSignature (地圖<字串, 物件>輸入內容、對應<字串物件> 輸出、字串signKey)

根據透過 signatureKey 提供的 SignatureDef 執行模型推論。

如要進一步瞭解允許的輸入和輸出,請參閱 run(Object, Object) 以及資料類型

警告:這是實驗性的 API,因此可能會有變動。

參數
輸入來源 將 SignatureDef 中的輸入名稱對應至輸入物件的對應。
輸出內容 來自 SignatureDef 輸出名稱的對應,用於輸出資料。如果 呼叫端希望在推論後直接查詢 Tensor 資料 (例如 輸出形狀為動態,或使用輸出緩衝區控制代碼。
signatureKey 可識別 SignatureDef 的簽名金鑰。
擲回
IllegalArgumentException 如果 inputs 為空值或空白,如果 outputssignatureKey 為空值,或是在執行推論時發生錯誤。

公開 void setCancelled (已取消布林值)

進階:在呼叫 run(Object, Object) 時中斷推論。

呼叫這個函式時,取消旗標會設為 true。翻譯人員 檢查運算叫用之間的旗標,如果是 true,翻譯器就會停止 解譯器會維持取消狀態,直到明確「未取消」為止依 setCancelled(false)

警告:這是實驗性的 API,因此可能會有變動。

參數
已取消 true 會盡可能取消推論;false 至 繼續播放。
擲回
IllegalStateException 如果解譯器未使用 cancellable 初始化 選項,此選項預設為關閉。