Interpreter

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
public class końcowy Interpreter

Klasa sterownika do napędu modelu wnioskowania z TensorFlow Lite.

Uwaga: Jeśli nie potrzebują dostępu do żadnej z „eksperymentalnych” API dysponuje poniżej, wolą używać InterpreterApi i InterpreterFactory zamiast przy użyciu interpretera bezpośrednio.

Interpreter obudowuje wstępnie przeszkolony TensorFlow Lite model, w którym operacje wykonywane są na modelu wnioskowania.

Na przykład, jeśli model zajmuje tylko jedno wejście i powrót tylko jedno wyjście:

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

Jeżeli model zajmuje kilka wejść i wyjść:

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

Jeżeli model bierze lub daje tensory ciągów:

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

Rozkazy wejść i wyjść są określane przy konwersji modelu TensorFlow modelu TensorFlowLite z Toco, podobnie jak kształty domyślne wejściach.

Jeśli wejścia są jako (wielowymiarowych) macierzy, odpowiednie napinacz wejściowy (a) będzie pośrednio zmieniany zgodnie z kształtem, który Array. Kiedy wejścia są dostarczane jako Buffer typów, nie niejawna skalowanie odbywa; wywołujący musi zapewnić, że Buffer rozmiar bajtów albo jest zgodny z odpowiednim tensora, albo że pierwsza zmiana rozmiaru tensor poprzez resizeInput(int, int[]) . Tensor informacja o kształcie oraz typu można uzyskać za pomocą Tensor klasy, dostępnej poprzez getInputTensor(int) , a getOutputTensor(int) .

UWAGA: Interpreter przypadki nie są bezpieczny wątku. Interpreter jest właścicielem zasobów, które muszą być wyraźnie uwolnione przez wywołanie close()

Biblioteka TFLite jest zbudowany przed NDK API 19. Może on pracować na poziomie API Androida poniżej 19, ale nie jest gwarantowana.

Klasy zagnieżdżone

klasa Interpreter.Options Klasa opcje kontrolowania zachowań czas pracy tłumacza.

Publiczne Konstruktorzy

Interpreter ( File modelFile)
Inicjuje Interpreter .
Interpreter ( File modelFile, Interpreter.Options opcji)
Inicjuje Interpreter i określa możliwości dostosowywania zachowań tłumacza.
Tłumacza ( ByteBuffer ByteBuffer )
Inicjuje Interpreter z ByteBuffer pliku modelu.
Interpreter ( ByteBuffer ByteBuffer, Interpreter.Options opcji)
Inicjuje Interpreter z ByteBuffer pliku modelu i zestaw niestandardowych Interpreter.Options .

Metody publiczne

próżnia
allocateTensors ()
Wyraźnie aktualizuje alokacje dla wszystkich tensorów, jeśli to konieczne.
próżnia
close ()
Zwolnić zasoby związane z InterpreterApi instancji.
int
getInputIndex ( String opname)
Pobiera indeks wejścia danego nazwa op wejścia.
Napinacz
getInputTensor (Int inputIndex)
Pobiera tensora związane z dostarczonym indeks wejściowego.
int
getInputTensorCount ()
Pobiera liczbę tensorów wejściowych.
Napinacz
getInputTensorFromSignature ( String inputName, String signatureKey)
Pobiera tensora związanego z provdied input name i podpis nazwie metody.
Długi
getLastNativeInferenceDurationNanoseconds ()
Zwraca natywną taktowanie wnioskowania.
int
getOutputIndex ( String opname)
Pobiera indeks wyjściu danej nazwy op wyjścia.
Napinacz
getOutputTensor (Int outputIndex)
Pobiera tensora powiązanych z podanym indeksie wyjściowego.
int
getOutputTensorCount ()
Pobiera liczbę tensory wyjściowych.
Napinacz
getOutputTensorFromSignature ( String outputName, String signatureKey)
Pobiera tensora związanego z provdied nazwy wyjścia w metodzie podpisu SZCZEGÓLNE.
Strunowy[]
getSignatureInputs ( String signatureKey)
Pobiera listę wejść SignatureDefs dla metody signatureKey .
Strunowy[]
getSignatureKeys ()
Pobiera listę SignatureDef eksportowanych nazwami metod dostępnych w modelu.
Strunowy[]
getSignatureOutputs ( String signatureKey)
Pobiera listę SignatureDefs wyjść dla metody signatureKey .
próżnia
resetVariableTensors ()
Zaawansowane: Resetuje wszystkie zmienne tensory do wartości domyślnej.
próżnia
resizeInput (Int IDX int [] zgaśnie, logiczna surowe)
Umożliwia zmianę rozmiaru IDX-th wejście natywnego modelu do podanych przyciemniony.
próżnia
resizeInput (Int IDX int [] zgaśnie)
Umożliwia zmianę rozmiaru IDX-th wejście natywnego modelu do podanych przyciemniony.
próżnia
uruchomienie ( obiektu wejściowego obiektu wyjście)
Uruchamia modelu wnioskowania jeśli model zajmuje tylko jedno wejście i zapewnia tylko jedno wyjście.
próżnia
runForMultipleInputsOutputs ( Zadanie [] wejścia, mapa < całkowita , obiekt > wyjścia)
Uruchamia modelu wnioskowania jeśli model zajmuje wiele wejść, wiele wyjść lub powroty.
próżnia
runSignature ( mapa < ciąg , obiekt > wejścia, mapa < ciąg , obiekt > wyjścia)
Tak samo jak runSignature(Map, Map, String) ale nie wymaga przechodzącą signatureKey, zakładając, że model ma jeden SignatureDef.
próżnia
runSignature ( mapa < ciąg , obiekt > wejścia, mapa < ciąg , obiekt > wyjściami ciąg signatureKey)
Działa modelu wnioskowania na podstawie SignatureDef dostarczane przez signatureKey .
próżnia
setCancelled (logiczna anulowania)
Zaawansowane: Przerwania wnioskowanie w środku rozmowy, aby run(Object, Object) .

dziedziczone metody

Publiczne Konstruktorzy

Interpreter publicznych ( File modelFile)

Inicjuje Interpreter .

parametry
modelFile Plik o wstępnie przeszkoleni modelu TF Lite.
Zgłasza
IllegalArgumentException jeśli modelFile nie koduje obowiązujący model TensorFlow Lite.

Interpreter publicznych ( File modelFile, Interpreter.Options opcji)

Inicjuje Interpreter i określa możliwości dostosowywania zachowań tłumacza.

parametry
modelFile plik z wcześniej przeszkoleni modelu TF Lite
Opcje zestaw opcji dostosowywania zachowań tłumacza
Zgłasza
IllegalArgumentException jeśli modelFile nie koduje obowiązujący model TensorFlow Lite.

Interpreter publicznych ( ByteBuffer ByteBuffer)

Inicjuje Interpreter z ByteBuffer pliku modelu.

ByteBuffer nie powinny być zmieniane po budowie Interpreter . ByteBuffer może być albo MappedByteBuffer że pamięć mapuje plik modelu, lub bezpośrednim ByteBuffer z nativeOrder (), która zawiera zawartość bajtów modelu.

parametry
ByteBuffer
Zgłasza
IllegalArgumentException jeśli byteBuffer nie jest MappedByteBuffer ani bezpośredni ByteBuffer z nativeOrder.

Interpreter publicznych ( ByteBuffer ByteBuffer, Interpreter.Options opcji)

Inicjuje Interpreter z ByteBuffer pliku modelu i zestaw niestandardowych Interpreter.Options .

ByteBuffer nie powinna być modyfikowana po budowę Interpreter . ByteBuffer może być albo MappedByteBuffer że pamięć mapuje plik modelu, lub bezpośrednim ByteBuffer z nativeOrder (), która zawiera zawartość bajtów modelu.

parametry
ByteBuffer
Opcje
Zgłasza
IllegalArgumentException jeśli byteBuffer nie jest MappedByteBuffer ani bezpośredni ByteBuffer z nativeOrder.

Metody publiczne

public void allocateTensors ()

Wyraźnie aktualizuje alokacje dla wszystkich tensorów, jeśli to konieczne.

W ten sposób rozprzestrzeniać się kształtów i przydział pamięci dla tensorów zależnych wykorzystaniem kształtu (ów) tensorowy wejściowych zgodnie z opisem.

Uwaga: Ta rozmowa jest czysto opcjonalne * *. Tensor przydział nastąpi automatycznie podczas wykonywania jeśli jakieś tensory wejściowe zostały przeskalowane. Połączenie jest najbardziej użyteczny w określaniu kształty dla tensorów wyjściowych przed wykonaniem wykres np

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

Uwaga: Niektóre wykresy mają dynamicznie ukształtowane wyjścia, przy czym kształt wyjściowy może nie w pełni propagują aż wnioskowanie jest wykonywany.

public void close ()

Zwolnić zasoby związane z InterpreterApi instancji.

public int getInputIndex ( String opname)

Pobiera indeks wejścia danego nazwa op wejścia.

parametry
opname

publicznego Tensor getInputTensor (int inputIndex)

Pobiera tensora związane z dostarczonym indeks wejściowego.

parametry
inputIndex

public int getInputTensorCount ()

Pobiera liczbę tensorów wejściowych.

publicznego Tensor getInputTensorFromSignature ( String inputName, String signatureKey)

Pobiera tensora związanego z provdied input name i podpis nazwie metody.

UWAGA: Jest to eksperymentalne API i mogą ulec zmianie.

parametry
inputName Nazwa wejścia w podpisie.
signatureKey klucz podpis identyfikacji SignatureDef, może być null, jeśli model ma jeden podpis.
Zgłasza
IllegalArgumentException jeśli inputName lub signatureKey jest null lub pusta lub nieprawidłowa nazwa warunkiem.

publicznych Długi getLastNativeInferenceDurationNanoseconds ()

Zwraca natywną taktowanie wnioskowania.

public int getOutputIndex ( String opname)

Pobiera indeks wyjściu danej nazwy op wyjścia.

parametry
opname

publicznego Tensor getOutputTensor (int outputIndex)

Pobiera tensora powiązanych z podanym indeksie wyjściowego.

Uwaga: dane wyjściowe (np tensor, kształt) mogą nie być w pełni wypełniona aż po wnioskowanie jest wykonywany. Jeśli potrzebujesz zaktualizowane dane * przed * prowadzenie wnioskowania (np po zmianie rozmiaru jest tensor wejściowy, który może unieważnić kształty wyjście tensora), użyj allocateTensors() jawnie alokacji wyzwalania i propagacji kształtu. Należy zauważyć, że na wykresach z kształtami wyjściowych, które są zależne od wartości wejściowych * * kształt wyjściowy może nie być w pełni określona, dopóki działa wnioskowanie.

parametry
outputIndex

public int getOutputTensorCount ()

Pobiera liczbę tensory wyjściowych.

publicznego Tensor getOutputTensorFromSignature ( String outputName, String signatureKey)

Pobiera tensora związanego z provdied nazwy wyjścia w metodzie podpisu SZCZEGÓLNE.

Uwaga: dane wyjściowe (np tensor, kształt) mogą nie być w pełni wypełniona aż po wnioskowanie jest wykonywany. Jeśli potrzebujesz zaktualizowane dane * przed * prowadzenie wnioskowania (np po zmianie rozmiaru jest tensor wejściowy, który może unieważnić kształty wyjście tensora), użyj allocateTensors() jawnie alokacji wyzwalania i propagacji kształtu. Należy zauważyć, że na wykresach z kształtami wyjściowych, które są zależne od wartości wejściowych * * kształt wyjściowy może nie być w pełni określona, dopóki działa wnioskowanie.

UWAGA: Jest to eksperymentalne API i mogą ulec zmianie.

parametry
outputName Nazwa wyjścia w podpisie.
signatureKey klucz podpis identyfikacji SignatureDef, może być null, jeśli model ma jeden podpis.
Zgłasza
IllegalArgumentException jeśli outputName lub signatureKey jest null lub pusta lub nieprawidłowa nazwa warunkiem.

public string [] getSignatureInputs ( String signatureKey)

Pobiera listę wejść SignatureDefs dla metody signatureKey .

UWAGA: Jest to eksperymentalne API i mogą ulec zmianie.

parametry
signatureKey

public String [] getSignatureKeys ()

Pobiera listę SignatureDef eksportowanych nazwami metod dostępnych w modelu.

UWAGA: Jest to eksperymentalne API i mogą ulec zmianie.

public string [] getSignatureOutputs ( String signatureKey)

Pobiera listę SignatureDefs wyjść dla metody signatureKey .

UWAGA: Jest to eksperymentalne API i mogą ulec zmianie.

parametry
signatureKey

public void resetVariableTensors ()

Zaawansowane: Resetuje wszystkie zmienne tensory do wartości domyślnej.

Jeśli zmienna tensor nie ma skojarzonego bufora, to będzie wyzerowany.

UWAGA: Jest to eksperymentalne API i mogą ulec zmianie.

public void resizeInput (int idx, int [] przygasa, logiczna ścisłe)

Umożliwia zmianę rozmiaru IDX-th wejście natywnego modelu do podanych przyciemniony.

Kiedy `strict` jest prawda, tylko nieznane wymiary mogą być zmniejszone. Brak wymiary podano jako `-1` tablicy zwróconej w` Tensor.shapeSignature () `.

parametry
idx
przygasa
ścisły

public void resizeInput (int idx, int [] przygasa)

Umożliwia zmianę rozmiaru IDX-th wejście natywnego modelu do podanych przyciemniony.

parametry
idx
przygasa

public void run ( Object wejściowego obiektu wyjście)

Uruchamia modelu wnioskowania jeśli model zajmuje tylko jedno wejście i zapewnia tylko jedno wyjście.

UWAGA: API jest bardziej efektywny, jeśli Buffer (korzystnie bezpośrednio, ale nie wymagane), jest używany jako typ danych wejścia / wyjścia. Proszę rozważyć użycie Buffer do paszy i pobrać dane pierwotne dla lepszej wydajności. Poniższe konkretne Buffer są obsługiwane typy:

  • ByteBuffer - kompatybilny z dowolnym leżącej prymitywnego typu Tensor.
  • FloatBuffer - kompatybilny z tensorów pływaka.
  • IntBuffer - kompatybilny z Int32 tensorów.
  • LongBuffer - kompatybilny z Int64 tensorów.
Zauważ, że wartość logiczna typy są obsługiwane tylko jako tablic, nie Buffer s, lub jako wejścia skalarnych.

parametry
Wejście tablicą lub wielowymiarową macierz lub Buffer z podstawowych typów, w tym int pływaka, długi i bajtu. Buffer jest preferowanym sposobem przekazywania dużych ilości danych wejściowych dla podstawowych typów, natomiast łańcuch typu wymagają przy użyciu (wielowymiarowej) ścieżki wejścia tablicy. Gdy Buffer jest używany, jego treść powinna pozostać bez zmian do modelu wnioskowania jest zrobione, a dzwoniący musi zapewnić, że Buffer jest w odpowiedniej pozycji odczytu. null wartość jest dozwolone tylko wtedy, gdy abonent używa Delegate które umożliwia współdziałanie bufor uchwytu i taki bufor jest związana z wejściem Tensor .
wyjście wielowymiarową macierz danych wyjściowych lub Buffer z podstawowych typów, w tym int pływaka, długi i bajtu. Gdy Buffer jest używany, dzwoniący musi upewnić się, że jest on ustawiony w odpowiedniej pozycji zapisu. Wartość zerowa jest dozwolone, i jest przydatny w niektórych przypadkach, na przykład, czy abonent używa Delegate które umożliwia współdziałanie bufora uchwytu i taki bufor jest związana z wyjściem Tensor (patrz Interpreter.Options # setAllowBufferHandleOutput (logiczna) ) lub jeśli wykres ma wyjście dynamiczne kształcie i wywołujący musi zapytania wyjściowy Tensor kształt po wniosek został wywołany, pobieranie danych bezpośrednio z tensora wyjściowej (przez Tensor.asReadOnlyBuffer() ).

publicznych pustych runForMultipleInputsOutputs ( Zadanie [] wejścia, mapa < całkowita , obiekt > wyjścia)

Uruchamia modelu wnioskowania jeśli model zajmuje wiele wejść, wiele wyjść lub powroty.

UWAGA: API jest bardziej skuteczne, jeśli Buffer S (korzystnie bezpośrednio, ale nie wymagane), są używane jako rodzaje danych wejściowych / wyjściowych. Proszę rozważyć użycie Buffer do paszy i pobrać dane pierwotne dla lepszej wydajności. Poniższe konkretne Buffer są obsługiwane typy:

  • ByteBuffer - kompatybilny z dowolnym leżącej prymitywnego typu Tensor.
  • FloatBuffer - kompatybilny z tensorów pływaka.
  • IntBuffer - kompatybilny z Int32 tensorów.
  • LongBuffer - kompatybilny z Int64 tensorów.
Zauważ, że wartość logiczna typy są obsługiwane tylko jako tablic, nie Buffer s, lub jako wejścia skalarnych.

Uwaga: null wartości rozkodowanego kodu traceability elementów inputs i outputs jest dozwolone tylko wtedy, gdy abonent używa Delegate które umożliwia współdziałanie bufor uchwytu i taki bufor jest związana z odpowiednim wejściu lub wyjściu Tensor (S).

parametry
wejścia tablicą danych wejściowych. Wejścia powinny być w tej samej kolejności, jak wejść modelu. Każde wejście może być tablicą lub wielowymiarową macierz lub Buffer z podstawowych typów, w tym int pływaka, długi i bajtu. Buffer jest preferowanym sposobem przekazywania dużych ilości danych wejściowych, przy czym łańcuch typu wymagają przy użyciu (wielowymiarowej) ścieżki wejścia tablicy. Gdy Buffer jest używany, jego treść powinna pozostać bez zmian do modelu wnioskowania jest zrobione, a dzwoniący musi zapewnić, że Buffer jest w odpowiedniej pozycji odczytu.
wyjścia mapie mapowania indeksy wyjście do wielowymiarowych tablic danych wyjściowych lub Buffer s prymitywnych typów, w tym int, float, długi i bajtów. To tylko musi zachować wpisy do wyjścia ma być używany. Gdy Buffer jest używany, dzwoniący musi upewnić się, że jest on ustawiony w odpowiedniej pozycji zapisu. Mapa może być pusty w przypadku gdy zarówno uchwyt buforowych używanych do Dane wyjściowe tensor lub w przypadkach, w których wyjścia są dynamicznie ukształtowane i wywołujący musi odpytywać wyjściowy Tensor kształtu po wnioskowania została wywołana, pobieranie danych bezpośrednio z tensora wyjściowego ( poprzez Tensor.asReadOnlyBuffer() ).

public void runSignature ( Map < String , Object > Wejścia, Map < String , Object > Wyjścia)

Tak samo jak runSignature(Map, Map, String) ale nie wymaga przechodzącą signatureKey, zakładając, że model ma jeden SignatureDef. Jeśli model ma więcej niż jeden SignatureDef będzie to wyjątek.

UWAGA: Jest to eksperymentalne API i mogą ulec zmianie.

parametry
wejścia
wyjścia

public void runSignature ( Map < String , Object > Wejścia, Map < String , Object > wyjść, String signatureKey)

Działa modelu wnioskowania na podstawie SignatureDef dostarczane przez signatureKey .

Zobacz run(Object, Object) Więcej informacji na temat dopuszczalnych typów danych wejściowych i wyjściowych.

UWAGA: Jest to eksperymentalne API i mogą ulec zmianie.

parametry
wejścia Mapa z nazwą wejścia w SignatureDef do obiektu wejściowego.
wyjścia Mapa z nazwy wyjścia w SignatureDef danych wyjściowych. To może być pusty, gdy abonent chciałby kwerendy Tensor danych bezpośrednio po wnioskowania (na przykład, jeżeli kształt wyjściowy jest dynamiczna lub uchwyty bufor wyjściowy jest używany).
signatureKey klucz podpis identyfikacji SignatureDef.
Zgłasza
IllegalArgumentException jeśli inputs jest null lub pusty, jeśli outputs lub signatureKey jest null, lub w przypadku wystąpienia błędu podczas uruchamiania wnioskowanie.

public void setCancelled (logiczna anulowane)

Zaawansowane: Przerwania wnioskowanie w środku rozmowy, aby run(Object, Object) .

Flaga odwołanie zostanie ustawiona na wartość true, gdy ta funkcja jest wywoływana. Interpreter sprawdzi flagę pomiędzy wywołaniami Op, a jeśli jest to true , interpreter zatrzyma wykonanie. Interpreter pozostaną anulowane, dopóki jawnie „niestemplowane” przez setCancelled(false) .

UWAGA: Jest to eksperymentalne API i mogą ulec zmianie.

parametry
odwołany true anulować wnioskowanie w sposób best-effort; false aby wznowić.
Zgłasza
IllegalStateException jeśli tłumacz nie jest inicjowany z opcją nieodwołalnego, który jest domyślnie wyłączony.