TensorFlow Lite でモデル推論を駆動するドライバー クラス。
注: 以下の「実験的な」API 機能のいずれにもアクセスする必要がない場合は、Interpreter を直接使用するよりも、InterpreterApi と InterpreterFactory を使用することをお勧めします。
Interpreter
は、事前にトレーニングされた TensorFlow Lite モデルをカプセル化し、モデル推論のために操作が実行されます。
たとえば、モデルが 1 つの入力のみを受け取り、1 つの出力のみを返す場合:
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);
}
Toco を使用して TensorFlow モデルを TensorFlowLite モデルに変換するときに、入力のデフォルト形状と同様に、入力と出力の順序が決定されます。
入力が (多次元) 配列として提供される場合、対応する入力テンソルは、その配列の形状に従って暗黙的にサイズ変更されます。入力がBuffer
型として提供される場合、暗黙的なサイズ変更は行われません。呼び出し元は、 Buffer
バイト サイズが対応するテンソルのバイト サイズと一致すること、または最初にresizeInput(int, int[])
を介してテンソルのサイズを変更することを確認する必要があります。 Tensor の形状と型の情報は、 getInputTensor(int)
およびgetOutputTensor(int)
) を介して利用可能なTensor
クラスを介して取得できます。
警告: Interpreter
インスタンスはスレッドセーフではありません。 Interpreter
は、 close()
を呼び出して明示的に解放する必要があるリソースを所有しています
TFLite ライブラリは、NDK API 19 に対して構築されています。19 未満の Android API レベルで動作する可能性がありますが、保証されていません。
ネストされたクラス
クラス | Interpreter.Options | ランタイム インタープリターの動作を制御するためのオプション クラス。 |
パブリック コンストラクター
インタープリター(ファイルmodelFile、 Interpreter.Optionsオプション) Interpreter を初期化し、インタープリターの動作をカスタマイズするためのオプションを指定します。 | |
公開メソッド
空所 | 割り当てテンソル() 必要に応じて、すべてのテンソルの割り当てを明示的に更新します。 |
空所 | 閉じる() InterpreterApi インスタンスに関連付けられているリソースを解放します。 |
整数 | |
テンソル | getInputTensor (int 入力インデックス) 指定された入力インデックスに関連付けられた Tensor を取得します。 |
整数 | getInputTensorCount () 入力テンソルの数を取得します。 |
テンソル | |
長いです | getLastNativeInferenceDurationNanoseconds () ネイティブの推論タイミングを返します。 |
整数 | |
テンソル | getOutputTensor (int 出力インデックス) 指定された出力インデックスに関連付けられた Tensor を取得します。 |
整数 | getOutputTensorCount () 出力テンソルの数を取得します。 |
テンソル | getOutputTensorFromSignature (文字列outputName、文字列signatureKey) 特定の署名メソッドで提供された出力名に関連付けられた Tensor を取得します。 |
弦[] | |
弦[] | getSignatureKeys () モデルで使用可能な SignatureDef エクスポート メソッド名のリストを取得します。 |
弦[] | |
空所 | resetVariableTensors () Advanced: すべての可変テンソルをデフォルト値にリセットします。 |
空所 | resizeInput (int idx, int[] dims, boolean strict) ネイティブ モデルの idx 番目の入力のサイズを指定されたディムに変更します。 |
空所 | resizeInput (int idx, int[] ディム) ネイティブ モデルの idx 番目の入力のサイズを指定されたディムに変更します。 |
空所 | |
空所 | runForMultipleInputsOutputs ( Object[]入力、 Map < Integer 、 Object > 出力) モデルが複数の入力を受け取る場合、または複数の出力を返す場合、モデルの推論を実行します。 |
空所 | runSignature ( Map < String , Object > 入力、 Map < String , Object > 出力) runSignature(Map, Map, String) 同じですが、モデルに 1 つの SignatureDef があると仮定すると、signatureKey を渡す必要はありません。 |
空所 | |
空所 | setCancelled (ブール値のキャンセル) 高度: run(Object, Object) の呼び出しの途中で推論を中断します。 |
継承されたメソッド
パブリック コンストラクター
public Interpreter (ファイルmodelFile)
Interpreter
を初期化します。
パラメーター
モデルファイル | 事前トレーニング済みの TF Lite モデルのファイル。 |
---|
スロー
IllegalArgumentException | modelFile が有効な TensorFlow Lite モデルをエンコードしない場合。 |
---|
public Interpreter (ファイルmodelFile、 Interpreter.Optionsオプション)
Interpreter
を初期化し、インタープリターの動作をカスタマイズするためのオプションを指定します。
パラメーター
モデルファイル | 事前トレーニング済みの TF Lite モデルのファイル |
---|---|
オプション | インタープリターの動作をカスタマイズするための一連のオプション |
スロー
IllegalArgumentException | modelFile が有効な TensorFlow Lite モデルをエンコードしない場合。 |
---|
パブリックインタープリター( ByteBuffer byteBuffer)
モデル ファイルのByteBuffer
を使用してInterpreter
を初期化します。
Interpreter
の構築後に ByteBuffer を変更しないでください。 ByteBuffer
は、モデル ファイルをメモリ マップするMappedByteBuffer
か、モデルのバイト コンテンツを含む nativeOrder() の直接ByteBuffer
のいずれかです。
パラメーター
バイトバッファ |
---|
スロー
IllegalArgumentException | byteBuffer がMappedByteBuffer でも、nativeOrder の直接のByteBuffer でもない場合。 |
---|
public Interpreter ( ByteBuffer byteBuffer, Interpreter.Optionsオプション)
モデル ファイルのByteBuffer
と一連のカスタムInterpreter.Options
を使用してInterpreter
を初期化します。
Interpreter
の構築後にByteBuffer
を変更しないでください。 ByteBuffer
は、モデル ファイルをメモリ マップするMappedByteBuffer
か、モデルのバイト コンテンツを含む nativeOrder() の直接ByteBuffer
のいずれかです。
パラメーター
バイトバッファ | |
---|---|
オプション |
スロー
IllegalArgumentException | byteBuffer がMappedByteBuffer でも、nativeOrder の直接のByteBuffer でもない場合。 |
---|
公開メソッド
public void allocateTensors ()
必要に応じて、すべてのテンソルの割り当てを明示的に更新します。
これにより、指定された入力テンソル形状を使用して、従属テンソルの形状とメモリ割り当てが伝播されます。
注: この呼び出しは *完全にオプション* です。入力テンソルのサイズが変更された場合、実行中にテンソルの割り当てが自動的に行われます。この呼び出しは、グラフを実行する前に出力テンソルの形状を決定するのに最も役立ちます。たとえば、
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...
注: 一部のグラフでは出力が動的に形成されます。この場合、推論が実行されるまで出力形状が完全に伝播されない場合があります。
public void close ()
InterpreterApi
インスタンスに関連付けられているリソースを解放します。
public int getInputTensorCount ()
入力テンソルの数を取得します。
public Tensor getInputTensorFromSignature (文字列inputName、文字列signatureKey)
提供された入力名と署名メソッド名に関連付けられた Tensor を取得します。
警告: これは実験的な API であり、変更される可能性があります。
パラメーター
入力名 | 署名に名前を入力します。 |
---|---|
署名キー | SignatureDef を識別する署名キーは、モデルに 1 つの署名がある場合は null にすることができます。 |
スロー
IllegalArgumentException | inputName またはsignatureKey が null または空である場合、または無効な名前が指定された場合。 |
---|
public Tensor getOutputTensor (int outputIndex)
指定された出力インデックスに関連付けられた Tensor を取得します。
注: 出力テンソルの詳細 (形状など) は、推論が実行されるまで完全に入力されない場合があります。推論を実行する *前* に詳細を更新する必要がある場合 (たとえば、出力テンソルの形状を無効にする可能性のある入力テンソルのサイズを変更した後)、割り当てと形状の伝播を明示的にトリガーするためallocateTensors()
を使用します。入力*値*に依存する出力形状を持つグラフの場合、推論を実行するまで出力形状が完全に決定されない場合があることに注意してください。
パラメーター
出力インデックス |
---|
public int getOutputTensorCount ()
出力テンソルの数を取得します。
public Tensor getOutputTensorFromSignature (文字列outputName、文字列signatureKey)
特定の署名メソッドで提供された出力名に関連付けられた Tensor を取得します。
注: 出力テンソルの詳細 (形状など) は、推論が実行されるまで完全に入力されない場合があります。推論を実行する *前* に詳細を更新する必要がある場合 (たとえば、出力テンソルの形状を無効にする可能性のある入力テンソルのサイズを変更した後)、割り当てと形状の伝播を明示的にトリガーするためallocateTensors()
を使用します。入力*値*に依存する出力形状を持つグラフの場合、推論を実行するまで出力形状が完全に決定されない場合があることに注意してください。
警告: これは実験的な API であり、変更される可能性があります。
パラメーター
出力名 | 署名に名前を出力します。 |
---|---|
署名キー | SignatureDef を識別する署名キーは、モデルに 1 つの署名がある場合は null にすることができます。 |
スロー
IllegalArgumentException | outputName またはsignatureKey が null または空の場合、または無効な名前が指定された場合。 |
---|
public String[] getSignatureInputs ( String signatureKey)
メソッドsignatureKey
の SignatureDefs 入力のリストを取得します。
警告: これは実験的な API であり、変更される可能性があります。
パラメーター
署名キー |
---|
public String[] getSignatureKeys ()
モデルで使用可能な SignatureDef エクスポート メソッド名のリストを取得します。
警告: これは実験的な API であり、変更される可能性があります。
public String[] getSignatureOutputs ( String signatureKey)
メソッドsignatureKey
の SignatureDefs 出力のリストを取得します。
警告: これは実験的な API であり、変更される可能性があります。
パラメーター
署名キー |
---|
public void resetVariableTensors ()
Advanced: すべての可変テンソルをデフォルト値にリセットします。
変数テンソルに関連するバッファがない場合、ゼロにリセットされます。
警告: これは実験的な API であり、変更される可能性があります。
public void resizeInput (int idx, int[] dims, boolean strict)
ネイティブ モデルの idx 番目の入力のサイズを指定されたディムに変更します。
`strict` が True の場合、不明な寸法のみサイズ変更できます。不明な次元は、`Tensor.shapeSignature()` によって返される配列で `-1` として示されます。
パラメーター
idx | |
---|---|
暗くなる | |
厳しい |
public void resizeInput (int idx, int[] ディム)
ネイティブ モデルの idx 番目の入力のサイズを指定されたディムに変更します。
パラメーター
idx | |
---|---|
暗くなる |
public void run (オブジェクト入力、オブジェクト出力)
モデルが 1 つの入力のみを受け取り、1 つの出力のみを提供する場合、モデルの推論を実行します。
警告: API は、入力/出力データ型としてBuffer
(直接が望ましいが必須ではない) を使用すると、より効率的になります。パフォーマンスを向上させるために、プリミティブ データのフィードとフェッチにBuffer
を使用することを検討してください。次の具体的なBuffer
型がサポートされています。
-
ByteBuffer
- 基になるプリミティブ Tensor 型と互換性があります。 -
FloatBuffer
- float Tensor と互換性があります。 -
IntBuffer
- int32 Tensor と互換性があります。 -
LongBuffer
- int64 Tensor と互換性があります。
Buffer
ではなく、スカラー入力としてもサポートされることに注意してください。 パラメーター
入力 | 配列または多次元配列、または int、float、long、および byte を含むプリミティブ型のBuffer 。 Buffer は、プリミティブ型の大きな入力データを渡すための推奨される方法ですが、文字列型は (多次元) 配列入力パスを使用する必要があります。 Buffer を使用する場合、モデルの推論が完了するまでその内容を変更しないでください。呼び出し元は、 Buffer が適切な読み取り位置にあることを確認する必要があります。 null 値は、呼び出し元がバッファー ハンドルの相互運用を許可するDelegate を使用しており、そのようなバッファーが入力Tensor にバインドされている場合にのみ許可されます。 |
---|---|
出力 | 出力データの多次元配列、または int、float、long、byte などのプリミティブ型のBuffer 。 Buffer を使用する場合、呼び出し元は、適切な書き込み位置が設定されていることを確認する必要があります。 null 値が許可され、特定の場合に役立ちます。たとえば、呼び出し元がバッファー ハンドルの相互運用を許可するDelegate を使用しており、そのようなバッファーが出力Tensor にバインドされている場合などです ( Interpreter.Options#setAllowBufferHandleOutput(boolean)も参照してください)。 )、またはグラフが動的に整形された出力を持ち、呼び出し元が推論が呼び出された後に出力Tensor 形状を照会しなければならない場合、( Tensor.asReadOnlyBuffer() を介して) 出力テンソルから直接データを取得します。 |
public void runForMultipleInputsOutputs ( Object[]入力、 Map < Integer 、 Object > 出力)
モデルが複数の入力を受け取る場合、または複数の出力を返す場合、モデルの推論を実行します。
警告: API は、入力/出力データ型としてBuffer
(直接が望ましいが必須ではない) を使用すると、より効率的になります。パフォーマンスを向上させるために、プリミティブ データのフィードとフェッチにBuffer
を使用することを検討してください。次の具体的なBuffer
型がサポートされています。
-
ByteBuffer
- 基になるプリミティブ Tensor 型と互換性があります。 -
FloatBuffer
- float Tensor と互換性があります。 -
IntBuffer
- int32 Tensor と互換性があります。 -
LongBuffer
- int64 Tensor と互換性があります。
Buffer
ではなく、スカラー入力としてもサポートされることに注意してください。注: inputs
とoutputs
の個々の要素のnull
値は、呼び出し元がバッファー ハンドルの相互運用を許可するDelegate
を使用しており、そのようなバッファーが対応する入力または出力Tensor
にバインドされている場合にのみ許可されます。
パラメーター
入力 | 入力データの配列。入力は、モデルの入力と同じ順序にする必要があります。各入力は、配列または多次元配列、または int、float、long、byte などのプリミティブ型のBuffer にすることができます。 Buffer は、大きな入力データを渡すための推奨される方法ですが、文字列型では (多次元) 配列入力パスを使用する必要があります。 Buffer を使用する場合、モデルの推論が完了するまでその内容を変更しないでください。呼び出し元は、 Buffer が適切な読み取り位置にあることを確認する必要があります。 |
---|---|
出力 | 出力インデックスを、出力データの多次元配列または int、float、long、byte などのプリミティブ型のBuffer にマッピングするマップ。使用する出力のエントリを保持するだけで済みます。 Buffer を使用する場合、呼び出し元は、適切な書き込み位置が設定されていることを確認する必要があります。マップは、バッファ ハンドルが出力テンソル データに使用される場合、または出力が動的に整形され、呼び出し元が推論が呼び出された後に出力Tensor 形状を照会し、出力テンソルから直接データをフェッチする必要がある場合に空になることがあります ( Tensor.asReadOnlyBuffer() 経由)。 |
public void runSignature ( Map < String , Object > 入力、 Map < String , Object > 出力)
runSignature(Map, Map, String)
同じですが、モデルに 1 つの SignatureDef があると仮定すると、signatureKey を渡す必要はありません。モデルに複数の SignatureDef がある場合、例外がスローされます。
警告: これは実験的な API であり、変更される可能性があります。
パラメーター
入力 | |
---|---|
出力 |
public void runSignature ( Map < String , Object > 入力, Map < String , Object > 出力, String signatureKey)
signatureKey
を通じて提供される SignatureDef に基づいてモデル推論を実行します。
許可される入力および出力データ型の詳細についてはrun(Object, Object)
を参照してください。
警告: これは実験的な API であり、変更される可能性があります。
パラメーター
入力 | SignatureDef の入力名から入力オブジェクトへのマップ。 |
---|---|
出力 | SignatureDef の出力名から出力データへのマップ。呼び出し元が推論の直後にTensor データを照会したい場合 (たとえば、出力形状が動的である場合、または出力バッファー ハンドルが使用される場合)、これは空になることがあります。 |
署名キー | SignatureDef を識別する署名キー。 |
スロー
IllegalArgumentException | inputs が null または空の場合、 outputs またはsignatureKey が null の場合、または推論の実行中にエラーが発生した場合。 |
---|
public void setCancelled (ブール値のキャンセル)
高度: run(Object, Object)
の呼び出しの途中で推論を中断します。
この関数が呼び出されると、キャンセル フラグが true に設定されます。インタープリターは Op 呼び出しの間にフラグをチェックし、それがtrue
の場合、インタープリターは実行を停止します。インタープリターは、 setCancelled(false)
によって明示的に「キャンセル」されるまで、キャンセルされた状態のままになります。
警告: これは実験的な API であり、変更される可能性があります。
パラメーター
キャンセル | ベスト エフォート方式で推論をキャンセルする場合はtrue 。再開する場合はfalse 。 |
---|
スロー
IllegalStateException | インタープリターがキャンセル可能なオプションで初期化されていない場合、これはデフォルトでオフになっています。 |
---|