Google I/O にご注目いただきありがとうございます。すべてのセッションをオンデマンドで表示オンデマンドで見る

Interpreter

public final クラスインタープリター

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を初期化します。
インタープリター(ファイルmodelFile、 Interpreter.Optionsオプション)
Interpreterを初期化し、インタープリターの動作をカスタマイズするためのオプションを指定します。
インタプリタ( ByteBuffer byteBuffer)
モデル ファイルのByteBufferを使用してInterpreterを初期化します。
インタープリター( ByteBuffer byteBuffer、 Interpreter.Optionsオプション)
モデル ファイルのByteBufferと一連のカスタムInterpreter.Optionsを使用してInterpreterを初期化します。

公開メソッド

空所
割り当てテンソル()
必要に応じて、すべてのテンソルの割り当てを明示的に更新します。
空所
閉じる()
InterpreterApiインスタンスに関連付けられているリソースを解放します。
整数
getInputIndex (文字列opName)
入力の操作名を指定して、入力のインデックスを取得します。
テンソル
getInputTensor (int 入力インデックス)
指定された入力インデックスに関連付けられた Tensor を取得します。
整数
getInputTensorCount ()
入力テンソルの数を取得します。
テンソル
getInputTensorFromSignature (文字列inputName、文字列signatureKey)
提供された入力名と署名メソッド名に関連付けられた Tensor を取得します。
長いです
getLastNativeInferenceDurationNanoseconds ()
ネイティブの推論タイミングを返します。
整数
getOutputIndex (文字列opName)
出力の op 名を指定して、出力のインデックスを取得します。
テンソル
getOutputTensor (int 出力インデックス)
指定された出力インデックスに関連付けられた Tensor を取得します。
整数
getOutputTensorCount ()
出力テンソルの数を取得します。
テンソル
getOutputTensorFromSignature (文字列outputName、文字列signatureKey)
特定の署名メソッドで提供された出力名に関連付けられた Tensor を取得します。
弦[]
getSignatureInputs (文字列の署名キー)
メソッドsignatureKeyの SignatureDefs 入力のリストを取得します。
弦[]
getSignatureKeys ()
モデルで使用可能な SignatureDef エクスポート メソッド名のリストを取得します。
弦[]
getSignatureOutputs (文字列の署名キー)
メソッドsignatureKeyの SignatureDefs 出力のリストを取得します。
空所
resetVariableTensors ()
Advanced: すべての可変テンソルをデフォルト値にリセットします。
空所
resizeInput (int idx, int[] dims, boolean strict)
ネイティブ モデルの idx 番目の入力のサイズを指定されたディムに変更します。
空所
resizeInput (int idx, int[] ディム)
ネイティブ モデルの idx 番目の入力のサイズを指定されたディムに変更します。
空所
run (オブジェクト入力、オブジェクト出力)
モデルが 1 つの入力のみを受け取り、1 つの出力のみを提供する場合、モデルの推論を実行します。
空所
runForMultipleInputsOutputs ( Object[]入力、 Map < IntegerObject > 出力)
モデルが複数の入力を受け取る場合、または複数の出力を返す場合、モデルの推論を実行します。
空所
runSignature ( Map < String , Object > 入力、 Map < String , Object > 出力)
runSignature(Map, Map, String)同じですが、モデルに 1 つの SignatureDef があると仮定すると、signatureKey を渡す必要はありません。
空所
runSignature ( Map <文字列,オブジェクト> 入力, Map <文字列,オブジェクト> 出力,文字列signatureKey)
signatureKeyを通じて提供される SignatureDef に基づいてモデル推論を実行します。
空所
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 byteBufferMappedByteBufferでも、nativeOrder の直接のByteBufferでもない場合。

public Interpreter ( ByteBuffer byteBuffer, Interpreter.Optionsオプション)

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

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

パラメーター
バイトバッファ
オプション
スロー
IllegalArgumentException byteBufferMappedByteBufferでも、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 getInputIndex (文字列opName)

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

パラメーター
opName

public Tensor getInputTensor (int inputIndex)

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

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

public int getInputTensorCount ()

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

public Tensor getInputTensorFromSignature (文字列inputName、文字列signatureKey)

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

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

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

public Long getLastNativeInferenceDurationNanoseconds ()

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

public int getOutputIndex (文字列opName)

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

パラメーター
opName

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 を含むプリミティブ型のBufferBufferは、プリミティブ型の大きな入力データを渡すための推奨される方法ですが、文字列型は (多次元) 配列入力パスを使用する必要があります。 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ではなく、スカラー入力としてもサポートされることに注意してください。

注: inputsoutputsの個々の要素の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インタープリターがキャンセル可能なオプションで初期化されていない場合、これはデフォルトでオフになっています。