既知の間接サブクラス |
実験的な方法を除く、TensorFlowLiteモデルインタープリターへのインターフェイス。
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);
}
入力と出力の順序は、入力のデフォルトの形状と同様に、TensorFlowモデルをTocoを使用してTensorFlowLiteモデルに変換するときに決定されます。
入力が(多次元)配列として提供される場合、対応する入力テンソルは、その配列の形状に従って暗黙的にサイズ変更されます。入力がBuffer
タイプとして提供されている場合、暗黙的なサイズ変更は行われません。呼び出し元は、 Buffer
のバイトサイズが対応するテンソルのサイズと一致するか、最初にresizeInput(int, int[])
を使用してテンソルのサイズを変更する必要があります。テンソルの形状とタイプの情報は、 getInputTensor(int)
およびgetOutputTensor(int)
)を介して利用可能なTensor
クラスを介して取得できます。
警告: InterpreterApi
インスタンスはスレッドセーフではありません。
警告: InterpreterApi
インスタンスは、 close()
を呼び出すことによって明示的に解放する必要があるリソースを所有しています。
TFLiteライブラリはNDKAPI19に対して構築されています。19未満のAndroidAPIレベルで動作する可能性がありますが、保証されていません。
ネストされたクラス
クラス | InterpreterApi.Options | ランタイムインタープリターの動作を制御するためのオプションクラス。 |
パブリックメソッド
抽象ボイド | locateTensors () 必要に応じて、すべてのテンサーの割り当てを明示的に更新します。 |
抽象ボイド | 閉じる() InterpreterApi インスタンスに関連付けられているリソースを解放します。 |
静的InterpreterApi | create ( File modelFile、 InterpreterApi.Optionsオプション) 指定されたモデルとオプションを使用して、 InterpreterApi インスタンスを構築します。 |
静的InterpreterApi | create ( ByteBuffer byteBuffer、 InterpreterApi.Optionsオプション) 指定されたモデルとオプションを使用して、 InterpreterApi インスタンスを構築します。 |
抽象int | |
抽象テンソル | getInputTensor (int inputIndex) 指定された入力インデックスに関連付けられたテンソルを取得します。 |
抽象int | getInputTensorCount () 入力テンサーの数を取得します。 |
抽象ロング | getLastNativeInferenceDurationNanoseconds () ネイティブの推論タイミングを返します。 |
抽象int | |
抽象テンソル | getOutputTensor (int outputIndex) 指定された出力インデックスに関連付けられたテンソルを取得します。 |
抽象int | getOutputTensorCount () 出力テンソルの数を取得します。 |
抽象ボイド | resizeInput (int idx、int [] dims、boolean strict) ネイティブモデルのidx番目の入力を指定されたdimにサイズ変更します。 |
抽象ボイド | resizeInput (int idx、int [] dims) ネイティブモデルのidx番目の入力を指定されたdimにサイズ変更します。 |
抽象ボイド | |
抽象ボイド | runForMultipleInputsOutputs ( Object []入力、 Map <整数、 Object >出力) モデルが複数の入力を受け取るか、複数の出力を返す場合、モデル推論を実行します。 |
継承されたメソッド
パブリックメソッド
public abstract voidlocateTensors ( )
必要に応じて、すべてのテンサーの割り当てを明示的に更新します。
これにより、指定された入力テンソル形状を使用して、依存テンサーの形状とメモリ割り当てが伝播されます。
注:この呼び出しは*純粋にオプション*です。入力テンサーのサイズが変更されている場合、テンソルの割り当ては実行中に自動的に行われます。この呼び出しは、グラフを実行する前に出力テンサーの形状を決定するのに最も役立ちます(例:
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 | グラフのテンサーを正常に割り当てることができなかった場合。 |
---|
public abstract void close ()
InterpreterApi
インスタンスに関連付けられているリソースを解放します。
public static InterpreterApi create (ファイルmodelFile、 InterpreterApi.Optionsオプション)
指定されたモデルとオプションを使用して、 InterpreterApi
インスタンスを構築します。モデルはファイルからロードされます。
パラメーター
modelFile | 事前にトレーニングされたTFLiteモデルを含むファイル。 |
---|---|
オプション | インタプリタの動作をカスタマイズするための一連のオプション。 |
スロー
IllegalArgumentException | modelFile が有効なTensorFlowLiteモデルをエンコードしていない場合。 |
---|
public static InterpreterApi create ( ByteBuffer byteBuffer、 InterpreterApi.Optionsオプション)
指定されたモデルとオプションを使用して、 InterpreterApi
インスタンスを構築します。モデルはByteBuffer
から読み取られます。
パラメーター
byteBuffer | バイナリシリアル化された形式の、事前にトレーニングされたTFLiteモデル。 InterpreterApi インスタンスの構築後に、ByteBufferを変更しないでください。 ByteBuffer は、モデルファイルをメモリマップするMappedByteBuffer 、またはモデルのバイトコンテンツを含むnativeOrder()の直接ByteBuffer のいずれかです。 |
---|---|
オプション | インタプリタの動作をカスタマイズするための一連のオプション。 |
スロー
IllegalArgumentException | byteBuffer がMappedByteBuffer でも、nativeOrderの直接ByteBuffer でもない場合。 |
---|
public abstract int getInputIndex ( String opName)
入力のop名を指定して入力のインデックスを取得します。
パラメーター
opName |
---|
スロー
IllegalArgumentException | opName が、インタープリターの初期化に使用されるモデルのどの入力とも一致しない場合。 |
---|
public abstract Tensor getInputTensor (int inputIndex)
指定された入力インデックスに関連付けられたテンソルを取得します。
パラメーター
inputIndex |
---|
スロー
IllegalArgumentException | inputIndex が負の場合、またはモデル入力の数より小さくない場合。 |
---|
public abstract int getInputTensorCount ()
入力テンサーの数を取得します。
public abstract Long getLastNativeInferenceDurationNanoseconds ()
ネイティブの推論タイミングを返します。
スロー
IllegalArgumentException | モデルがインタプリタによって初期化されていない場合。 |
---|
public abstract int getOutputIndex ( String opName)
出力のop名を指定して出力のインデックスを取得します。
パラメーター
opName |
---|
スロー
IllegalArgumentException | opName が、インタープリターの初期化に使用されるモデルのどの出力とも一致しない場合。 |
---|
public abstract Tensor getOutputTensor (int outputIndex)
指定された出力インデックスに関連付けられたテンソルを取得します。
注:出力テンソルの詳細(形状など)は、推論が実行されるまで完全に入力されない場合があります。推論を実行する*前*に詳細を更新する必要がある場合(たとえば、入力テンソルのサイズを変更した後、出力テンソルの形状が無効になる可能性があります)、 allocateTensors()
を使用して、割り当てと形状の伝播を明示的にトリガーします。入力*値*に依存する出力形状を持つグラフの場合、推論を実行するまで出力形状が完全に決定されない場合があることに注意してください。
パラメーター
outputIndex |
---|
スロー
IllegalArgumentException | outputIndex が負の場合、またはモデル出力の数より小さくない場合。 |
---|
public abstract int getOutputTensorCount ()
出力テンソルの数を取得します。
public abstract void resizeInput (int idx、int [] dims、boolean strict)
ネイティブモデルのidx番目の入力を指定されたdimにサイズ変更します。
`strict`がTrueの場合、サイズ変更できるのは不明なディメンションのみです。不明な寸法は、 `Tensor.shapeSignature()`によって返される配列で`-1`として示されます。
パラメーター
idx | |
---|---|
薄暗い | |
厳しい |
スロー
IllegalArgumentException | idx が負の場合、またはモデル入力の数より小さくない場合。または、idx番目の入力のサイズ変更時にエラーが発生した場合。さらに、 `strict`がTrueの場合、固定寸法のテンソルのサイズを変更しようとするとエラーが発生します。 |
---|
public abstract void resizeInput (int idx、int [] dims)
ネイティブモデルのidx番目の入力を指定されたdimにサイズ変更します。
パラメーター
idx | |
---|---|
薄暗い |
スロー
IllegalArgumentException | idx が負の場合、またはモデル入力の数より小さくない場合。または、idx番目の入力のサイズ変更時にエラーが発生した場合。 |
---|
public abstract void run (オブジェクト入力、オブジェクト出力)
モデルが1つの入力のみを受け取り、1つの出力のみを提供する場合、モデル推論を実行します。
警告:入力/出力データタイプとしてBuffer
(できれば直接ですが、必須ではありません)を使用すると、APIの効率が向上します。パフォーマンスを向上させるために、 Buffer
を使用してプリミティブデータをフィードおよびフェッチすることを検討してください。次の具体的なBuffer
タイプがサポートされています。
-
ByteBuffer
基になるプリミティブTensorタイプと互換性があります。 -
FloatBuffer
-floatTensorsと互換性があります。 -
IntBuffer
-int32テンソルと互換性があります。 -
LongBuffer
-int64テンソルと互換性があります。
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 <整数、 Object >出力)
モデルが複数の入力を受け取るか、複数の出力を返す場合、モデル推論を実行します。
警告:入力/出力データタイプとしてBuffer
(できれば直接ですが、必須ではありません)を使用すると、APIの効率が向上します。パフォーマンスを向上させるために、 Buffer
を使用してプリミティブデータをフィードおよびフェッチすることを検討してください。次の具体的なBuffer
タイプがサポートされています。
-
ByteBuffer
基になるプリミティブTensorタイプと互換性があります。 -
FloatBuffer
-floatTensorsと互換性があります。 -
IntBuffer
-int32テンソルと互換性があります。 -
LongBuffer
-int64テンソルと互換性があります。
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の場合、または推論の実行中にエラーが発生した場合。 |
---|