InterpreterApi

öffentliche Schnittstelle InterpreterApi
Bekannte indirekte Unterklassen

Schnittstelle zum TensorFlow Lite-Modellinterpreter, ausgenommen experimentelle Methoden.

Eine InterpreterApi-Instanz kapselt ein vortrainiertes TensorFlow Lite-Modell, in dem werden für die Modellinferenz ausgeführt.

Wenn ein Modell beispielsweise nur eine Eingabe annimmt und nur eine Ausgabe zurückgibt:

try (InterpreterApi interpreter =
     new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
   interpreter.run(input, output);
 }
 

Wenn ein Modell mehrere Eingaben oder Ausgaben annimmt:

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

Wenn ein Modell Stringtensoren annimmt oder erzeugt:

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

Beachten Sie, dass es einen Unterschied zwischen Form [] und Form[1] gibt. Für skalaren String-Tensor Ausgaben:

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

Die Reihenfolge der Ein- und Ausgaben wird beim Konvertieren eines TensorFlow-Modells in TensorFlowLite festgelegt. mit Toco-Modell erstellen, sowie die Standardformen der Eingaben.

Wenn Eingaben als (multidimensionale) Arrays bereitgestellt werden, ergeben sich für die entsprechenden Eingabetensoren implizit an die Form dieses Arrays angepasst werden. Wenn Eingaben vom Typ Buffer bereitgestellt werden, wird keine implizite Größenänderung durchgeführt. Der Aufrufer muss sicherstellen, dass die Bytegröße Buffer entweder mit der des entsprechenden Tensors übereinstimmt oder dass sie zuerst die Größe des Tensors über resizeInput(int, int[]) ändern. Form und Typ von Tensor lassen sich verfügbar über die Klasse Tensor, verfügbar über getInputTensor(int) und getOutputTensor(int).

WARNUNG:InterpreterApi-Instanzen sind nicht threadsicher.

WARNUNG:Eine InterpreterApi-Instanz besitzt Ressourcen, die sein müssen durch Aufrufen von close() explizit freigegeben

Die TFLite-Bibliothek basiert auf NDK API 19. Es kann für Android API-Levels unter 19 funktionieren, aber nicht garantiert.

Verschachtelte Klassen

Klasse InterpreterApi.Options Eine Optionsklasse zur Steuerung des Laufzeitinterpreterverhaltens.

Public Methods

Abstrakt voidm
allocateTensors()
Aktualisiert bei Bedarf explizit Zuweisungen für alle Tensoren.
Abstrakt voidm
close()
Geben Sie Ressourcen frei, die mit der Instanz InterpreterApi verknüpft sind.
Statisch InterpreterApi
create(File modelFile, InterpreterApi.Options)
Erstellt eine InterpreterApi-Instanz mit dem angegebenen Modell und den angegebenen Optionen.
Statisch InterpreterApi
create(ByteBuffer byteBuffer, InterpreterApi.Options-Optionen)
Erstellt eine InterpreterApi-Instanz mit dem angegebenen Modell und den angegebenen Optionen.
Abstrakt Ganzzahl
getInputIndex(String opName)
Ruft den Index einer Eingabe anhand des Vorgangsnamens der Eingabe ab.
Abstrakt Tensor
getInputTensor(int inputIndex)
Ruft den Tensor ab, der dem bereitgestellten Eingabeindex zugeordnet ist.
Abstrakt Ganzzahl
getInputTensorCount()
Ruft die Anzahl der Eingabetensoren ab.
Abstrakt Lang
getLastNativeInferenceDurationNanoseconds()
Gibt das Timing der nativen Inferenz zurück.
Abstrakt Ganzzahl
getOutputIndex(String opName)
Ruft den Index einer Ausgabe anhand des Vorgangsnamens der Ausgabe ab.
Abstrakt Tensor
getOutputTensor(int-outputIndex)
Ruft den Tensor ab, der dem bereitgestellten Ausgabeindex zugeordnet ist.
Abstrakt Ganzzahl
getOutputTensorCount()
Ruft die Anzahl der Tensoren für die Ausgabe ab.
Abstrakt voidm
resizeInput(int idx, int[] dims, boolean strict)
Ändert die Größe der idx-ten Eingabe des nativen Modells an die angegebenen Dimmungen.
Abstrakt voidm
resizeInput(int idx, int[] dimme)
Ändert die Größe der idx-ten Eingabe des nativen Modells an die angegebenen Dimmungen.
Abstrakt voidm
run(Objekteingabe, Objektausgabe)
Führt eine Modellinferenz aus, wenn das Modell nur eine Eingabe annimmt und nur eine Ausgabe bereitstellt.
Abstrakt voidm
runForMultipleInputsOutputs(Object[]-Eingaben, Map<IntegerObject>-Ausgaben)
Führt eine Modellinferenz aus, wenn das Modell mehrere Eingaben annimmt oder mehrere Ausgaben zurückgibt.

Übernommene Methoden

Public Methods

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt voidm allocateTensors ()

Aktualisiert bei Bedarf explizit Zuweisungen für alle Tensoren.

Dadurch werden Formen und Arbeitsspeicherzuweisungen für abhängige Tensoren mithilfe der Eingabe Tensorform(en) wie angegeben.

Hinweis: Dieser Aufruf ist *reine optional*. Die Tensor-Zuweisung erfolgt automatisch während wenn die Größe von Eingabetensoren geändert wurde. Dieser Aufruf ist sehr nützlich, um die Formen für Ausgabetensoren, bevor Sie den Graphen ausführen. Beispiel:

 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...

Hinweis: Einige Grafiken haben dynamisch geformte Ausgaben. In diesem Fall ist die Ausgabeform möglicherweise nicht bis die Inferenz ausgeführt wird.

Löst aus
IllegalStateException die Tensoren des Graphen nicht erfolgreich zugewiesen werden konnten.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt voidm schließen ()

Geben Sie Ressourcen frei, die mit der Instanz InterpreterApi verknüpft sind.

<ph type="x-smartling-placeholder"></ph> öffentlich Statisch InterpreterApi Erstellen (File modelFile, InterpreterApi.Options-Optionen)

Erstellt eine InterpreterApi-Instanz mit dem angegebenen Modell und den angegebenen Optionen. Das Modell werden aus einer Datei geladen.

Parameter
modelFile Eine Datei mit einem vortrainierten TF Lite-Modell.
Optionen Eine Reihe von Optionen zum Anpassen des Dolmetscherverhaltens.
Löst aus
IllegalArgumentException Wenn modelFile keinen gültigen TensorFlow Lite-Code codiert modellieren.

<ph type="x-smartling-placeholder"></ph> öffentlich Statisch InterpreterApi Erstellen (ByteBuffer byteBuffer, InterpreterApi.Options Optionen)

Erstellt eine InterpreterApi-Instanz mit dem angegebenen Modell und den angegebenen Optionen. Das Modell wird aus einem ByteBuffer gelesen.

Parameter
byteBuffer Ein vortrainiertes TF Lite-Modell in binär serialisierter Form. Der ByteBuffer sollte nach dem Erstellen einer InterpreterApi-Instanz nicht mehr geändert werden. Die ByteBuffer kann entweder eine MappedByteBuffer sein, die eine Modelldatei im Arbeitsspeicher abbildet, oder direktes ByteBuffer von "nativeOrder()", das den Byteinhalt eines Modells enthält.
Optionen Eine Reihe von Optionen zum Anpassen des Dolmetscherverhaltens.
Löst aus
IllegalArgumentException byteBuffer ist weder ein MappedByteBuffer noch ein direkt ByteBuffer von nativeOrder.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt Ganzzahl getInputIndex (String opName)

Ruft den Index einer Eingabe anhand des Vorgangsnamens der Eingabe ab.

Parameter
opName
Löst aus
IllegalArgumentException opName stimmt mit keiner Eingabe im verwendeten Modell überein. um den Interpreter zu initialisieren.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt Tensor getInputTensor (int inputIndex)

Ruft den Tensor ab, der dem bereitgestellten Eingabeindex zugeordnet ist.

Parameter
inputIndex
Löst aus
IllegalArgumentException inputIndex ist negativ oder nicht kleiner als der Wert Anzahl der Modelleingaben.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt Ganzzahl getInputTensorCount ()

Ruft die Anzahl der Eingabetensoren ab.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt Lang getLastNativeInferenceDurationNanoseconds ()

Gibt das Timing der nativen Inferenz zurück.

Löst aus
IllegalArgumentException Das Modell wird nicht vom Interpreter initialisiert.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt Ganzzahl getOutputIndex (String opName)

Ruft den Index einer Ausgabe anhand des Vorgangsnamens der Ausgabe ab.

Parameter
opName
Löst aus
IllegalArgumentException opName stimmt mit keiner Ausgabe im verwendeten Modell überein. um den Interpreter zu initialisieren.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt Tensor getOutputTensor (int outputIndex)

Ruft den Tensor ab, der dem bereitgestellten Ausgabeindex zugeordnet ist.

Hinweis: Details zu Ausgabetensoren (z.B. Form) werden möglicherweise erst nach der Inferenz vollständig ausgefüllt ausgeführt wird. Wenn Sie *vor* dem Ausführen einer Inferenz (z.B. nach der Größenanpassung eines Eingabetensor, der Ausgabetensorformen entwerten kann, verwenden Sie allocateTensors(), um die Zuweisung und Form-Weitergabe explizit auslösen. Bei Grafiken mit Ausgabeformen die von *Eingabewerten* abhängig sind, ist die Ausgabeform möglicherweise erst ausgeführte Inferenz.

Parameter
outputIndex
Löst aus
IllegalArgumentException outputIndex ist negativ oder nicht kleiner als der Wert Anzahl der Modellausgaben.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt Ganzzahl getOutputTensorCount ()

Ruft die Anzahl der Tensoren für die Ausgabe ab.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt voidm resizeInput (int idx, int[] dimmen, boolesch streng)

Ändert die Größe der idx-ten Eingabe des nativen Modells an die angegebenen Dimmungen.

Wenn „strikt“ auf „True“ gesetzt ist, kann nur die Größe unbekannter Dimensionen geändert werden. Unbekannte Abmessungen sind angegeben als "-1" im von "Tensor.shapeSignature()" zurückgegebenen Array.

Parameter
IdX
dunkler
Strikt
Löst aus
IllegalArgumentException idx ist negativ oder nicht kleiner als die Zahl. von Modelleingaben. oder wenn bei der Größenänderung der idx-ten Eingabe ein Fehler auftritt. Außerdem wird der Fehler tritt auf, wenn versucht wird, die Größe eines Tensors mit festen Abmessungen zu ändern, wenn „strikt“ auf „wahr“ gesetzt ist.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt voidm resizeInput (Int idx, int[] dimme)

Ändert die Größe der idx-ten Eingabe des nativen Modells an die angegebenen Dimmungen.

Parameter
IdX
dunkler
Löst aus
IllegalArgumentException idx ist negativ oder nicht kleiner als die Zahl. von Modelleingaben. oder wenn bei der Größenänderung der idx-ten Eingabe ein Fehler auftritt.

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt voidm laufen (Objekt-Eingabe, Objekt-Ausgabe)

Führt eine Modellinferenz aus, wenn das Modell nur eine Eingabe annimmt und nur eine Ausgabe bereitstellt.

Warnung: Die API ist effizienter, wenn ein Buffer (bevorzugt, direkt, aber nicht erforderlich) verwendet wird. als Eingabe-/Ausgabedatentyp verwendet. Bitte verwenden Sie Buffer zum Einspeisen und Abrufen um eine bessere Leistung zu erzielen. Die folgenden konkreten Buffer-Typen sind unterstützt:

  • ByteBuffer – kompatibel mit allen zugrunde liegenden primitiven Tensor-Typen.
  • FloatBuffer – kompatibel mit Float-Tensoren.
  • IntBuffer – kompatibel mit int32-Tensoren.
  • LongBuffer – kompatibel mit int64-Tensoren.
Boolesche Typen werden nur als Arrays, nicht als Buffers oder als skalare Eingaben unterstützt.

Parameter
Eingabe Array oder mehrdimensionales Array oder Buffer primitiver Typen einschließlich int, float, long und byte. Buffer ist die bevorzugte Methode, um große Eingabedaten für primitive Typen, während für Zeichenfolgentypen die (multidimensionale) Array-Eingabepfad. Wenn eine Buffer verwendet wird, sollte ihr Inhalt bis zu diesem Zeitpunkt unverändert bleiben. Modellinferenz erfolgt und der Aufrufer muss sicherstellen, dass sich die Buffer am Leseposition ein. Ein null-Wert ist nur zulässig, wenn der Aufrufer eine Delegate, die die Interoperabilität der Zwischenspeicherverarbeitung zulässt, und ein solcher Zwischenspeicher wurde an den Geben Sie Tensor ein.
output ein multidimensionales Array von Ausgabedaten oder eine Buffer von primitiven Typen einschließlich int, float, long und byte. Bei Verwendung von Buffer muss der Aufrufer sicherstellen, dass die entsprechende Schreibposition eingestellt ist. Ein Nullwert ist zulässig und nützlich für In bestimmten Fällen, z.B. wenn der Aufrufer ein Delegate verwendet, das ein Zwischenspeicher-Handle zulässt interop und ein solcher Zwischenspeicher wurde an die Ausgabe-Tensor gebunden (siehe auch Interpreter.Options#setAllowBufferHandleOutput(boolean)). Oder wenn die Grafik über dynamisch geformte Ausgaben verfügt und der Aufrufer die Ausgabeform Tensor abfragen muss, nachdem die Inferenz aufgerufen wurde, um die Daten direkt aus der Ausgabe abzurufen Tensor (über Tensor.asReadOnlyBuffer()).
Löst aus
IllegalArgumentException wenn input null oder leer ist oder wenn ein Fehler auftritt, ausgeführte Inferenz.
IllegalArgumentException (EXPERIMENTELL, Änderungen vorbehalten), wenn die Inferenz ist unterbrochen von setCancelled(true).

<ph type="x-smartling-placeholder"></ph> öffentlich Abstrakt voidm runForMultipleInputsOutputs (Object[]-Eingaben, Map<IntegerObject>-Ausgaben)

Führt eine Modellinferenz aus, wenn das Modell mehrere Eingaben annimmt oder mehrere Ausgaben zurückgibt.

Warnung: Die API ist effizienter, wenn Buffers (bevorzugt direkt, aber nicht erforderlich) als Eingabe-/Ausgabedatentypen verwendet. Bitte verwenden Sie Buffer zum Einspeisen und Abrufen um eine bessere Leistung zu erzielen. Die folgenden konkreten Buffer-Typen sind unterstützt:

  • ByteBuffer – kompatibel mit allen zugrunde liegenden primitiven Tensor-Typen.
  • FloatBuffer – kompatibel mit Float-Tensoren.
  • IntBuffer – kompatibel mit int32-Tensoren.
  • LongBuffer – kompatibel mit int64-Tensoren.
Boolesche Typen werden nur als Arrays, nicht als Buffers oder als skalare Eingaben unterstützt.

Hinweis: null-Werte für einzelne Elemente von inputs und outputs sind nur zulässig, wenn der Aufrufer eine Delegate verwendet, die Interoperabilität zur Zwischenspeicherbehandlung zulässt, und Ein solcher Zwischenspeicher wurde an die entsprechende(n) Eingabe- oder Ausgabe-Tensor(s) gebunden.

Parameter
Eingaben ein Array von Eingabedaten. Die Eingaben müssen die gleiche Reihenfolge haben wie die Eingaben des modellieren. Jede Eingabe kann ein Array oder ein mehrdimensionales Array oder ein Buffer von wie int, float, long und byte. Buffer ist die bevorzugte Route große Eingabedaten übergeben, während bei Stringtypen die Verwendung des (multidimensionalen) Arrays erforderlich ist Eingabepfad. Wenn Buffer verwendet wird, sollte sein Inhalt bis zum Modell unverändert bleiben der Inferenz erfolgt und der Aufrufer muss sicherstellen, dass sich die Buffer am richtigen Leseposition ein.
Ausgaben eine Zuordnung, die Ausgabeindexe mehrdimensionalen Arrays von Ausgabedaten oder Buffers primitiver Typen wie Int, Float, Long und Byte zuordnet. Es muss nur die Einträge für die zu verwendenden Ausgaben. Bei Verwendung von Buffer muss der Aufrufer sicherstellen, dass die entsprechende Schreibposition eingestellt ist. Die Karte kann leer sein, wenn entweder Puffer-Handles werden für Ausgabetensor-Daten oder Fälle verwendet, in denen die Ausgaben dynamisch sind Shaped und der Aufrufer muss die Tensor-Ausgabeform abfragen, nachdem die Inferenz durchgeführt wurde aufgerufen, wodurch die Daten direkt aus dem Ausgabetensor abgerufen werden (über Tensor.asReadOnlyBuffer()).
Löst aus
IllegalArgumentException wenn inputs null oder leer ist, wenn outputs gleich Null oder wenn beim Ausführen der Inferenz ein Fehler auftritt.