Interpreter

パブリック最終クラスインタプリタ

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);
 }
 

形状 [] と形状 [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);
 

入力と出力の順序は、入力のデフォルトの形状と同様に、Toco を使用して TensorFlow モデルを TensorFlowLite モデルに変換するときに決定されます。

入力が (多次元) 配列として提供される場合、対応する入力テンソルはその配列の形状に従って暗黙的にサイズ変更されます。入力がBufferタイプとして提供される場合、暗黙的なサイズ変更は行われません。呼び出し元は、 Bufferバイト サイズが対応するテンソルのバイト サイズと一致すること、または最初にresizeInput(int, int[])によってテンソルのサイズを変更することを確認する必要があります。 Tensor の形状と型の情報はTensorクラスを介して取得でき、 getInputTensor(int)およびgetOutputTensor(int)を介して利用できます。

警告: InterpreterインスタンスはスレッドセーフではありませんInterpreter close()を呼び出して明示的に解放する必要があるリソースを所有しています。

TFLite ライブラリは NDK API 19 に対して構築されています。19 未満の Android API レベルでも動作する可能性がありますが、保証されていません。

ネストされたクラス

クラスインタプリタのオプションランタイムインタープリターの動作を制御するためのオプションクラス。

パブリックコンストラクター

インタプリタ(ファイルモデルファイル)
Interpreterを初期化します。
インタープリター(ファイルモデルファイル、インタープリター.オプションオプション)
Interpreterを初期化し、インタプリタの動作をカスタマイズするためのオプションを指定します。
インタプリタ( ByteBuffer byteBuffer)
モデル ファイルのByteBufferを使用してInterpreterを初期化します。
インタプリタ( ByteBuffer byteBuffer、 Interpreter.Optionsオプション)
モデル ファイルのByteBufferとカスタムInterpreter.Optionsのセットを使用してInterpreterを初期化します。

パブリックメソッド

空所
割り当てTensor ()
必要に応じて、すべてのテンソルの割り当てを明示的に更新します。
空所
近い()
InterpreterApiインスタンスに関連付けられたリソースを解放します。
整数
getInputIndex ( String opName)
入力の op 名を指定して、入力のインデックスを取得します。
テンソル
getInputTensor (int inputIndex)
指定された入力インデックスに関連付けられた Tensor を取得します。
整数
getInputTensorCount ()
入力テンソルの数を取得します。
テンソル
getInputTensorFromSignature ( String inputName, String signalKey)
指定された入力名と署名メソッド名に関連付けられた Tensor を取得します。
長さ
getLastNativeInferenceDurationNano秒()
ネイティブ推論タイミングを返します。
整数
getOutputIndex ( String opName)
出力の op 名を指定して出力のインデックスを取得します。
テンソル
getOutputTensor (int OutputIndex)
指定された出力インデックスに関連付けられた Tensor を取得します。
整数
getOutputTensorCount ()
出力テンソルの数を取得します。
テンソル
getOutputTensorFromSignature (文字列出力名、文字列署名キー)
特定の署名メソッドで指定された出力名に関連付けられた Tensor を取得します。
弦[]
getSignatureInputs (文字列のsignatureKey)
メソッドsignatureKeyの SignatureDefs 入力のリストを取得します。
弦[]
getSignatureKeys ()
モデルで使用可能な SignatureDef エクスポートされたメソッド名のリストを取得します。
弦[]
getSignatureOutputs (文字列のsignatureKey)
メソッドsignatureKeyの SignatureDefs 出力のリストを取得します。
空所
リセット変数テンソル()
詳細: すべての可変テンソルをデフォルト値にリセットします。
空所
sizeInput (int idx、int[] dims、boolean strict)
ネイティブ モデルの idx 番目の入力のサイズを指定された寸法に変更します。
空所
sizeInput (int idx, int[] dims)
ネイティブ モデルの idx 番目の入力のサイズを指定された寸法に変更します。
空所
run (オブジェクト入力、オブジェクト出力)
モデルが入力を 1 つだけ受け取り、出力を 1 つだけ提供する場合、モデル推論を実行します。
空所
runForMultipleInputsOutputs ( Object[]入力、 Map < IntegerObject > 出力)
モデルが複数の入力を受け取る場合、または複数の出力を返す場合、モデル推論を実行します。
空所
runSignature ( Map < String , Object > 入力、 Map < String , Object > 出力)
runSignature(Map, Map, String)と同じですが、モデルに 1 つの SignatureDef があると仮定すると、signatureKey を渡す必要はありません。
空所
runSignature ( Map < String , Object > 入力、 Map < String , Object > 出力、 String SignatureKey)
signatureKeyを通じて提供される SignatureDef に基づいてモデル推論を実行します。
空所
setCancelled (ブール値がキャンセルされました)
詳細: run(Object, Object)の呼び出しの途中で推論を中断します。

継承されたメソッド

パブリックコンストラクター

パブリックインタプリタ(ファイルモデルFile)

Interpreterを初期化します。

パラメーター
モデルファイル事前トレーニングされた TF Lite モデルのファイル。
投げる
IllegalArgumentException modelFile有効な TensorFlow Lite モデルをエンコードしていない場合。

パブリックインタプリタ(ファイルモデルファイル、インタプリタ.オプションオプション)

Interpreterを初期化し、インタプリタの動作をカスタマイズするためのオプションを指定します。

パラメーター
モデルファイル事前トレーニングされた TF Lite モデルのファイル
オプションインタプリタの動作をカスタマイズするための一連のオプション
投げる
IllegalArgumentException modelFile有効な TensorFlow Lite モデルをエンコードしていない場合。

パブリックインタプリタ( ByteBuffer byteBuffer)

モデル ファイルのByteBufferを使用してInterpreterを初期化します。

ByteBuffer は、 Interpreterの構築後に変更しないでください。 ByteBuffer 、モデル ファイルをメモリ マップするMappedByteBuffer 、またはモデルのバイト コンテンツを含むnativeOrder() の直接ByteBufferのいずれかになります。

パラメーター
バイトバッファ
投げる
IllegalArgumentException byteBufferMappedByteBufferでも、nativeOrder の直接のByteBufferでもない場合。

パブリックインタプリタ( ByteBuffer byteBuffer、 Interpreter.Optionsオプション)

モデル ファイルのByteBufferとカスタムInterpreter.Optionsのセットを使用してInterpreterを初期化します。

ByteBuffer Interpreterの構築後に変更しないでください。 ByteBuffer 、モデル ファイルをメモリ マップするMappedByteBuffer 、またはモデルのバイト コンテンツを含むnativeOrder() の直接ByteBufferのいずれかになります。

パラメーター
バイトバッファ
オプション
投げる
IllegalArgumentException byteBufferMappedByteBufferでも、nativeOrder の直接のByteBufferでもない場合。

パブリックメソッド

public void assignTensors ()

必要に応じて、すべてのテンソルの割り当てを明示的に更新します。

これにより、指定された入力テンソル形状を使用して、依存テンソルの形状とメモリ割り当てが伝播されます。

注: この呼び出しは *純粋にオプション* です。入力テンソルのサイズが変更されている場合、テンソルの割り当ては実行中に自動的に行われます。この呼び出しは、グラフを実行する前に出力テンソルの形状を決定する場合に最も役立ちます (

 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 getInputIndex ( String opName)

入力の op 名を指定して、入力のインデックスを取得します。

パラメーター
操作名

public Tensor getInputTensor (int inputIndex)

指定された入力インデックスに関連付けられた Tensor を取得します。

パラメーター
入力インデックス

public int getInputTensorCount ()

入力テンソルの数を取得します。

public Tensor getInputTensorFromSignature ( String inputName, String signalKey)

指定された入力名と署名メソッド名に関連付けられた Tensor を取得します。

警告: これは実験的な API であり、変更される可能性があります。

パラメーター
入力名署名に名前を入力します。
署名キーSignatureDef を識別する署名キーは、モデルに署名が 1 つある場合は null にすることができます。
投げる
IllegalArgumentException inputNameまたはsignatureKey null または空の場合、または無効な名前が指定された場合。

public Long getLastNativeInferenceDurationNano秒()

ネイティブ推論タイミングを返します。

public int getOutputIndex ( String opName)

出力の op 名を指定して出力のインデックスを取得します。

パラメーター
操作名

public Tensor getOutputTensor (int OutputIndex)

指定された出力インデックスに関連付けられた Tensor を取得します。

注: 出力テンソルの詳細 (形状など) は、推論が実行されるまで完全に設定されない場合があります。推論を実行する「前」に更新された詳細が必要な場合 (出力テンソル形状が無効になる可能性がある入力テンソルのサイズ変更後など)、割り当てと形状伝播を明示的にトリガーするためにallocateTensors()を使用します。入力 *値* に依存する出力形状を持つグラフの場合、出力形状は推論を実行するまで完全には決定されない可能性があることに注意してください。

パラメーター
出力インデックス

public int getOutputTensorCount ()

出力テンソルの数を取得します。

public Tensor getOutputTensorFromSignature ( String OutputName, String SignatureKey)

特定の署名メソッドで指定された出力名に関連付けられた Tensor を取得します。

注: 出力テンソルの詳細 (形状など) は、推論が実行されるまで完全に設定されない場合があります。推論を実行する「前」に更新された詳細が必要な場合 (出力テンソル形状が無効になる可能性がある入力テンソルのサイズ変更後など)、割り当てと形状伝播を明示的にトリガーするためにallocateTensors()を使用します。入力 *値* に依存する出力形状を持つグラフの場合、出力形状は推論を実行するまで完全には決定されない可能性があることに注意してください。

警告: これは実験的な API であり、変更される可能性があります。

パラメーター
出力名署名に名前を出力します。
署名キーSignatureDef を識別する署名キーは、モデルに署名が 1 つある場合は null にすることができます。
投げる
IllegalArgumentException outputNameまたはsignatureKeyが null または空の場合、または無効な名前が指定された場合。

public String[] getSignatureInputs ( String signedKey)

メソッドsignatureKeyの SignatureDefs 入力のリストを取得します。

警告: これは実験的な API であり、変更される可能性があります。

パラメーター
署名キー

public String[] getSignatureKeys ()

モデルで使用可能な SignatureDef エクスポートされたメソッド名のリストを取得します。

警告: これは実験的な API であり、変更される可能性があります。

public String[] getSignatureOutputs ( String signedKey)

メソッドsignatureKeyの SignatureDefs 出力のリストを取得します。

警告: これは実験的な API であり、変更される可能性があります。

パラメーター
署名キー

public void replaceVariableTensors ()

詳細: すべての可変テンソルをデフォルト値にリセットします。

可変テンソルに関連付けられたバッファがない場合は、ゼロにリセットされます。

警告: これは実験的な API であり、変更される可能性があります。

public void SimplyInput (int idx, int[] dims, boolean strict)

ネイティブ モデルの idx 番目の入力のサイズを指定された寸法に変更します。

「strict」が True の場合、不明な次元のみサイズ変更できます。未知の次元は、`Tensor.shapeSignature()` によって返される配列内で `-1` として示されます。

パラメーター
いど
薄暗くなります
厳しい

public void SimplyInput (int idx, int[] dims)

ネイティブ モデルの idx 番目の入力のサイズを指定された寸法に変更します。

パラメーター
いど
薄暗くなります

public void run (オブジェクト入力、オブジェクト出力)

モデルが入力を 1 つだけ受け取り、出力を 1 つだけ提供する場合、モデル推論を実行します。

警告: 入力/出力データ型としてBuffer (直接が望ましいが必須ではありません) を使用すると、API がより効率的になります。パフォーマンスを向上させるために、 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 などのプリミティブ型のBufferBufferを使用する場合、呼び出し元はバッファが適切な書き込み位置に設定されていることを確認する必要があります。 null 値は許可されており、特定の場合に役立ちます。たとえば、呼び出し元がバッファ ハンドルの相互運用を許可するDelegateを使用しており、そのようなバッファが出力Tensorにバインドされている場合です ( Interpreter.Options#setAllowBufferHandleOutput(boolean) も参照) )、またはグラフに動的に整形された出力があり、呼び出し元が推論が呼び出された後に出力Tensor形状をクエリする必要がある場合は、( Tensor.asReadOnlyBuffer()経由で) 出力テンソルから直接データをフェッチします。

public void runForMultipleInputsOutputs ( Object[]入力、 Map < IntegerObject > 出力)

モデルが複数の入力を受け取る場合、または複数の出力を返す場合、モデル推論を実行します。

警告: 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インタプリタがキャンセル可能オプション (デフォルトではオフ) を使用して初期化されていない場合。