既知の間接サブクラス |
TensorFlow Lite モデル インタープリターへのインターフェイス (実験的メソッドを除く)。
InterpreterApi
インスタンスは、モデル推論のために操作が実行される事前トレーニングされた TensorFlow Lite モデルをカプセル化します。
たとえば、モデルが入力を 1 つだけ受け取り、出力を 1 つだけ返す場合は、次のようになります。
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);
入力と出力の順序は、入力のデフォルトの形状と同様に、Toco を使用して TensorFlow モデルを TensorFlowLite モデルに変換するときに決定されます。
入力が (多次元) 配列として提供される場合、対応する入力テンソルはその配列の形状に従って暗黙的にサイズ変更されます。入力がBuffer
タイプとして提供される場合、暗黙的なサイズ変更は行われません。呼び出し元は、 Buffer
バイト サイズが対応するテンソルのバイト サイズと一致すること、または最初にresizeInput(int, int[])
によってテンソルのサイズを変更することを確認する必要があります。 Tensor の形状と型の情報はTensor
クラスを介して取得でき、 getInputTensor(int)
およびgetOutputTensor(int)
介して利用できます。
警告: InterpreterApi
インスタンスはスレッドセーフではありません。
警告: InterpreterApi
インスタンスは、 close()
を呼び出して明示的に解放する必要があるリソースを所有しています。
TFLite ライブラリは NDK API 19 に対して構築されています。19 未満の Android API レベルでも動作する可能性がありますが、保証されていません。
ネストされたクラス
クラス | インタプリタApi.オプション | ランタイムインタープリターの動作を制御するためのオプションクラス。 |
パブリックメソッド
抽象的な空白 | 割り当てTensor () 必要に応じて、すべてのテンソルの割り当てを明示的に更新します。 |
抽象的な空白 | 近い() InterpreterApi インスタンスに関連付けられたリソースを解放します。 |
静的インタープリタ API | |
静的インタープリタ API | create ( ByteBuffer byteBuffer、 InterpreterApi.Optionsオプション) 指定されたモデルとオプションを使用して、 InterpreterApi インスタンスを構築します。 |
抽象整数 | |
抽象テンソル | getInputTensor (int inputIndex) 指定された入力インデックスに関連付けられた Tensor を取得します。 |
抽象整数 | getInputTensorCount () 入力テンソルの数を取得します。 |
抽象的な長い | getLastNativeInferenceDurationNano秒() ネイティブ推論タイミングを返します。 |
抽象整数 | |
抽象テンソル | getOutputTensor (int OutputIndex) 指定された出力インデックスに関連付けられた Tensor を取得します。 |
抽象整数 | getOutputTensorCount () 出力テンソルの数を取得します。 |
抽象的な空白 | sizeInput (int idx、int[] dims、boolean strict) ネイティブ モデルの idx 番目の入力のサイズを指定された寸法に変更します。 |
抽象的な空白 | sizeInput (int idx, int[] dims) ネイティブ モデルの idx 番目の入力のサイズを指定された寸法に変更します。 |
抽象的な空白 | |
抽象的な空白 | runForMultipleInputsOutputs ( Object[]入力、 Map < Integer 、 Object > 出力) モデルが複数の入力を受け取る場合、または複数の出力を返す場合、モデル推論を実行します。 |
継承されたメソッド
パブリックメソッド
public abstract 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...
注: 一部のグラフには動的に整形された出力があり、その場合、出力の整形は推論が実行されるまで完全に伝播しない可能性があります。
投げる
IllegalStateException | グラフのテンソルを正常に割り当てることができなかった場合。 |
---|
パブリック抽象 void close ()
InterpreterApi
インスタンスに関連付けられたリソースを解放します。
public static InterpreterApi create (ファイルmodelFile、 InterpreterApi.Optionsオプション)
指定されたモデルとオプションを使用して、 InterpreterApi
インスタンスを構築します。モデルはファイルからロードされます。
パラメータ
モデルファイル | 事前トレーニングされた TF Lite モデルを含むファイル。 |
---|---|
オプション | インタプリタの動作をカスタマイズするためのオプションのセット。 |
投げる
IllegalArgumentException | modelFile 有効な TensorFlow Lite モデルをエンコードしていない場合。 |
---|
public static InterpreterApi create ( ByteBuffer byteBuffer、 InterpreterApi.Optionsオプション)
指定されたモデルとオプションを使用して、 InterpreterApi
インスタンスを構築します。モデルはByteBuffer
から読み取られます。
パラメータ
バイトバッファ | バイナリシリアル化形式の事前トレーニング済み TF Lite モデル。 ByteBuffer は、 InterpreterApi インスタンスの構築後に変更しないでください。 ByteBuffer 、モデル ファイルをメモリ マップするMappedByteBuffer 、またはモデルのバイト コンテンツを含むnativeOrder() の直接ByteBuffer いずれかになります。 |
---|---|
オプション | インタプリタの動作をカスタマイズするためのオプションのセット。 |
投げる
IllegalArgumentException | byteBuffer がMappedByteBuffer でも、nativeOrder の直接のByteBuffer でもない場合。 |
---|
public abstract int getInputIndex ( String opName)
入力の op 名を指定して、入力のインデックスを取得します。
パラメータ
操作名 |
---|
投げる
IllegalArgumentException | opName インタプリタの初期化に使用されるモデル内のどの入力にも一致しない場合。 |
---|
パブリック抽象テンソルgetInputTensor (int inputIndex)
指定された入力インデックスに関連付けられた Tensor を取得します。
パラメータ
入力インデックス |
---|
投げる
IllegalArgumentException | inputIndex が負の場合、またはモデル入力の数以上の場合。 |
---|
public abstract int getInputTensorCount ()
入力テンソルの数を取得します。
パブリック抽象Long getLastNativeInferenceDurationNano Seconds ()
ネイティブ推論タイミングを返します。
投げる
IllegalArgumentException | モデルがインタプリタによって初期化されていない場合。 |
---|
public abstract int getOutputIndex ( String opName)
出力の op 名を指定して出力のインデックスを取得します。
パラメータ
操作名 |
---|
投げる
IllegalArgumentException | opName インタープリターの初期化に使用されるモデル内のどの出力にも一致しない場合。 |
---|
パブリック抽象テンソルgetOutputTensor (int OutputIndex)
指定された出力インデックスに関連付けられた Tensor を取得します。
注: 出力テンソルの詳細 (形状など) は、推論が実行されるまで完全に設定されない場合があります。推論を実行する *前* (出力テンソル形状が無効になる可能性がある入力テンソルのサイズ変更後) に更新された詳細が必要な場合は、割り当てと形状伝播を明示的にトリガーするためにallocateTensors()
を使用します。入力 *値* に依存する出力形状を持つグラフの場合、出力形状は推論を実行するまで完全には決定されない可能性があることに注意してください。
パラメータ
出力インデックス |
---|
投げる
IllegalArgumentException | outputIndex が負の場合、またはモデル出力の数以上の場合。 |
---|
public abstract int getOutputTensorCount ()
出力テンソルの数を取得します。
public abstract void raiseInput (int idx, int[] dims, boolean strict)
ネイティブ モデルの idx 番目の入力のサイズを指定された寸法に変更します。
「strict」が True の場合、不明な次元のみサイズ変更できます。未知の次元は、`Tensor.shapeSignature()` によって返される配列内で `-1` として示されます。
パラメータ
いど | |
---|---|
薄暗くなります | |
厳しい |
投げる
IllegalArgumentException | idx が負の場合、またはモデル入力の数以上の場合。または、idx 番目の入力のサイズを変更するときにエラーが発生した場合。さらに、「strict」が True のときに固定次元でテンソルのサイズを変更しようとすると、エラーが発生します。 |
---|
public abstract void raiseInput (int idx, int[] dims)
ネイティブ モデルの idx 番目の入力のサイズを指定された寸法に変更します。
パラメータ
いど | |
---|---|
薄暗くなります |
投げる
IllegalArgumentException | idx が負の場合、またはモデル入力の数以上の場合。または、idx 番目の入力のサイズを変更するときにエラーが発生した場合。 |
---|
public abstract 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 などのプリミティブ型のBuffer 。 Buffer を使用する場合、呼び出し元はバッファが適切な書き込み位置に設定されていることを確認する必要があります。 null 値は許可されており、特定の場合に役立ちます。たとえば、呼び出し元がバッファ ハンドルの相互運用を許可するDelegate を使用しており、そのようなバッファが出力Tensor にバインドされている場合です ( Interpreter.Options#setAllowBufferHandleOutput(boolean)も参照) )、またはグラフに動的に整形された出力があり、呼び出し元が推論が呼び出された後に出力Tensor 形状をクエリする必要がある場合は、( Tensor.asReadOnlyBuffer() 経由で) 出力テンソルから直接データをフェッチします。 |
投げる
IllegalArgumentException | input null または空の場合、または推論の実行時にエラーが発生した場合。 |
---|---|
IllegalArgumentException | (実験的、変更される可能性があります) setCancelled(true) によって推論が中断された場合。 |
public abstract 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() 経由)。 |
投げる
IllegalArgumentException | inputs null または空の場合、 outputs が null の場合、または推論の実行時にエラーが発生した場合。 |
---|