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 | |
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<Integer, Object>-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.
Buffer
s 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<Integer, Object>-Ausgaben)
Führt eine Modellinferenz aus, wenn das Modell mehrere Eingaben annimmt oder mehrere Ausgaben zurückgibt.
Warnung: Die API ist effizienter, wenn Buffer
s (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.
Buffer
s 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 Buffer s 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.
|
---|