Znane podklasy pośrednie |
Interfejs do interpretera modelu TensorFlow Lite, z wyłączeniem metod eksperymentalnych.
Instancja InterpreterApi
zawiera wstępnie wytrenowany model TensorFlow Lite, w którym wykonywane są operacje w celu wnioskowania o modelu.
Na przykład, jeśli model przyjmuje tylko jedno wejście i zwraca tylko jedno wyjście:
try (InterpreterApi interpreter =
new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
interpreter.run(input, output);
}
Jeśli model przyjmuje wiele danych wejściowych lub wyjściowych:
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);
}
Jeśli model bierze lub produkuje tensory strun:
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);
}
Zauważ, że istnieje rozróżnienie między kształtem [] a kształtem [1]. Dla wyjść skalarnego tensora strun:
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);
Kolejność wejść i wyjść jest określana podczas konwersji modelu TensorFlow na model TensorFlowLite za pomocą Toco, podobnie jak domyślne kształty wejść.
Gdy dane wejściowe są dostarczane jako (wielowymiarowe) tablice, odpowiednie tensory wejściowe zostaną domyślnie zmienione zgodnie z kształtem tej tablicy. Gdy dane wejściowe są dostarczane jako typy Buffer
, nie jest wykonywana niejawna zmiana rozmiaru; osoba wywołująca musi upewnić się, że rozmiar bajtu Buffer
jest zgodny z odpowiednim tensorem lub że najpierw zmieni rozmiar tensora za pomocą resizeInput(int, int[])
. Informacje o kształcie i typie tensora można uzyskać za pośrednictwem klasy Tensor
dostępnej za pośrednictwem getInputTensor(int)
i getOutputTensor(int)
.
OSTRZEŻENIE: Instancje InterpreterApi
nie są bezpieczne wątkowo.
OSTRZEŻENIE: Instancja InterpreterApi
posiada zasoby, które muszą zostać jawnie zwolnione przez wywołanie metody close()
Biblioteka TFLite jest zbudowana w oparciu o NDK API 19. Może działać na poziomach API Androida poniżej 19, ale nie jest to gwarantowane.
Klasy zagnieżdżone
klasa | InterpreterApi.Opcje | Klasa opcji do kontrolowania zachowania interpretera w czasie wykonywania. |
Metody publiczne
abstrakcyjna pustka | alokujTensory () W razie potrzeby jawnie aktualizuje alokacje dla wszystkich tensorów. |
abstrakcyjna pustka | zamknij () Zwolnij zasoby powiązane z instancją InterpreterApi . |
static InterpreterApi | utwórz ( Plik modelu pliku, opcje InterpreterApi.Options ) Tworzy wystąpienie InterpreterApi przy użyciu określonego modelu i opcji. |
static InterpreterApi | utwórz ( ByteBuffer byteBuffer, opcje InterpreterApi.Options ) Tworzy wystąpienie InterpreterApi przy użyciu określonego modelu i opcji. |
streszczenie int | getInputIndex ( Ciąg opNazwa) Pobiera indeks danych wejściowych na podstawie nazwy operacji danych wejściowych. |
abstrakcyjny tensor | getInputTensor (int inputIndex) Pobiera Tensor skojarzony z podanym indeksem wejściowym. |
streszczenie int | getInputTensorCount () Pobiera liczbę tensorów wejściowych. |
streszczenie Długie | getLastNativeInferenceDurationNanosekundy () Zwraca rodzimy czas wnioskowania. |
streszczenie int | getOutputIndex ( Ciąg opNazwa) Pobiera indeks danych wyjściowych na podstawie nazwy operacji danych wyjściowych. |
abstrakcyjny tensor | getOutputTensor (int outputIndex) Pobiera Tensor skojarzony z podanym indeksem danych wyjściowych. |
streszczenie int | getOutputTensorCount () Pobiera liczbę tensorów wyjściowych. |
abstrakcyjna pustka | resizeInput (int idx, int[] dim, boolean strict) Zmienia rozmiar wejścia idx-tego modelu natywnego na podane dim. |
abstrakcyjna pustka | resizeInput (int idx, int [] dim) Zmienia rozmiar wejścia idx-tego modelu natywnego na podane dim. |
abstrakcyjna pustka | |
abstrakcyjna pustka | runForMultipleInputsOutputs ( Wejścia obiektu [] , Map < Integer , Obiekt > wyjścia) Uruchamia wnioskowanie o modelu, jeśli model przyjmuje wiele danych wejściowych lub zwraca wiele danych wyjściowych. |
Metody odziedziczone
Metody publiczne
public abstract void przydziel Tensory ()
W razie potrzeby jawnie aktualizuje alokacje dla wszystkich tensorów.
Spowoduje to propagację kształtów i alokacji pamięci dla zależnych tensorów przy użyciu podanych kształtów tensora wejściowego.
Uwaga: To połączenie jest *wyłącznie opcjonalne*. Alokacja tensorów nastąpi automatycznie podczas wykonywania, jeśli zmieniono rozmiar jakichkolwiek tensorów wejściowych. To wywołanie jest najbardziej przydatne przy określaniu kształtów dla dowolnych tensorów wyjściowych przed wykonaniem wykresu, 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ą dane wyjściowe kształtowane dynamicznie, w takim przypadku kształt wyjściowy może nie być w pełni propagowany, dopóki nie zostanie wykonane wnioskowanie.
Rzuty
Niedozwolony wyjątek stanu | jeśli tensory wykresu nie mogły zostać pomyślnie przydzielone. |
---|
publiczne streszczenie void zamknij ()
Zwolnij zasoby powiązane z instancją InterpreterApi
.
public static Tworzenie InterpreterApi ( plik modelu pliku , opcje InterpreterApi.Options )
Tworzy wystąpienie InterpreterApi
przy użyciu określonego modelu i opcji. Model zostanie wczytany z pliku.
Parametry
ModelPlik | Plik zawierający wstępnie wytrenowany model TF Lite. |
---|---|
opcje | Zestaw opcji dostosowywania zachowania tłumacza. |
Rzuty
Niedozwolony wyjątek Argument | jeśli modelFile nie koduje prawidłowego modelu TensorFlow Lite. |
---|
publiczne statyczne tworzenie InterpreterApi ( ByteBuffer byteBuffer, opcje InterpreterApi.Options )
Tworzy wystąpienie InterpreterApi
przy użyciu określonego modelu i opcji. Model zostanie odczytany z ByteBuffer
.
Parametry
ByteBuffer | Wstępnie przeszkolony model TF Lite w binarnej postaci serializowanej. ByteBuffer nie powinien być modyfikowany po zbudowaniu instancji InterpreterApi . ByteBuffer może być albo MappedByteBuffer , który odwzorowuje plik modelu w pamięci, albo bezpośrednim ByteBuffer nativeOrder(), który zawiera bajty zawartości modelu. |
---|---|
opcje | Zestaw opcji dostosowywania zachowania tłumacza. |
Rzuty
Niedozwolony wyjątek Argument | jeśli byteBuffer nie jest MappedByteBuffer ani bezpośrednim ByteBuffer nativeOrder. |
---|
public abstract int getInputIndex ( String opName)
Pobiera indeks danych wejściowych na podstawie nazwy operacji danych wejściowych.
Parametry
Nazwa op |
---|
Rzuty
Niedozwolony wyjątek Argument | jeśli opName nie pasuje do żadnych danych wejściowych w modelu użytym do zainicjowania interpretera. |
---|
public abstract Tensor getInputTensor (int inputIndex)
Pobiera Tensor skojarzony z podanym indeksem wejściowym.
Parametry
inputIndex |
---|
Rzuty
Niedozwolony wyjątek Argument | jeśli inputIndex jest ujemny lub nie jest mniejszy niż liczba danych wejściowych modelu. |
---|
publiczne streszczenie int getInputTensorCount ()
Pobiera liczbę tensorów wejściowych.
streszczenie publiczne Long getLastNativeInferenceDurationNanosekundy ()
Zwraca rodzimy czas wnioskowania.
Rzuty
Niedozwolony wyjątek Argument | jeśli model nie jest inicjowany przez interpreter. |
---|
public abstract int getOutputIndex ( String opName)
Pobiera indeks danych wyjściowych na podstawie nazwy operacji danych wyjściowych.
Parametry
Nazwa op |
---|
Rzuty
Niedozwolony wyjątek Argument | jeśli opName nie pasuje do żadnego wyjścia w modelu użytym do zainicjowania interpretera. |
---|
public abstract Tensor getOutputTensor (int outputIndex)
Pobiera Tensor skojarzony z podanym indeksem danych wyjściowych.
Uwaga: Szczegóły wyjściowego tensora (np. kształt) mogą nie zostać w pełni wypełnione, dopóki nie zostanie wykonane wnioskowanie. Jeśli potrzebujesz zaktualizować szczegóły *przed* uruchomieniem wnioskowania (np. po zmianie rozmiaru tensora wejściowego, co może unieważnić kształty tensora wyjściowego), użyj allocateTensors()
w celu jawnego wyzwolenia alokacji i propagacji kształtu. Należy zauważyć, że w przypadku wykresów z kształtami wyjściowymi zależnymi od *wartości* wejściowych kształt wyjściowy może nie być w pełni określony, dopóki nie uruchomi się wnioskowania.
Parametry
wskaźnik wyjściowy |
---|
Rzuty
Niedozwolony wyjątek Argument | jeśli outputIndex jest ujemny lub nie jest mniejszy niż liczba wyjść modelu. |
---|
publiczne streszczenie int getOutputTensorCount ()
Pobiera liczbę tensorów wyjściowych.
public abstract void resizeInput (int idx, int [] dims, boolean strict)
Zmienia rozmiar wejścia idx-tego modelu natywnego na podane dim.
Gdy `ścisły` ma wartość Prawda, można zmienić rozmiar tylko nieznanych wymiarów. Nieznane wymiary są oznaczone jako „-1” w tablicy zwracanej przez funkcję „Tensor.shapeSignature()”.
Parametry
idx | |
---|---|
przyciemnia | |
ścisły |
Rzuty
Niedozwolony wyjątek Argument | jeśli idx jest ujemne lub nie jest mniejsze od liczby wejść modelu; lub jeśli wystąpi błąd podczas zmiany rozmiaru idx-tego wejścia. Ponadto błąd występuje podczas próby zmiany rozmiaru tensora o stałych wymiarach, gdy parametr „ścisłe” ma wartość Prawda. |
---|
public abstract void resizeInput (int idx, int [] dims)
Zmienia rozmiar wejścia idx-tego modelu natywnego na podane dim.
Parametry
idx | |
---|---|
przyciemnia |
Rzuty
Niedozwolony wyjątek Argument | jeśli idx jest ujemne lub nie jest mniejsze od liczby wejść modelu; lub jeśli wystąpi błąd podczas zmiany rozmiaru idx-tego wejścia. |
---|
publiczny abstrakcyjny przebieg nieważności (wejście obiektu , wyjście obiektu )
Uruchamia wnioskowanie o modelu, jeśli model przyjmuje tylko jedno dane wejściowe i udostępnia tylko jedno dane wyjściowe.
Ostrzeżenie: interfejs API jest bardziej wydajny, jeśli Buffer
(najlepiej bezpośredni, ale nie wymagany) jest używany jako typ danych wejścia/wyjścia. Rozważ użycie funkcji Buffer
do przesyłania i pobierania danych pierwotnych w celu uzyskania lepszej wydajności. Obsługiwane są następujące konkretne typy Buffer
:
-
ByteBuffer
— kompatybilny z dowolnym pierwotnym typem tensora. -
FloatBuffer
- kompatybilny z tensorami typu float. -
IntBuffer
- kompatybilny z tensorami int32. -
LongBuffer
— kompatybilny z tensorami int64.
Buffer
s lub jako skalarne dane wejściowe. Parametry
wejście | tablica lub tablica wielowymiarowa lub Buffer typów pierwotnych, w tym int, float, long i byte. Buffer jest preferowanym sposobem przekazywania dużych danych wejściowych dla typów pierwotnych, podczas gdy typy łańcuchowe wymagają użycia (wielowymiarowej) ścieżki wejściowej tablicy. Gdy używany jest Buffer , jego zawartość powinna pozostać niezmieniona do momentu zakończenia wnioskowania o modelu, a wywołujący musi upewnić się, że Buffer znajduje się na odpowiedniej pozycji do odczytu. Wartość null jest dozwolona tylko wtedy, gdy obiekt wywołujący używa Delegate , który zezwala na interopcję obsługi bufora, a taki bufor został powiązany z wejściem Tensor . |
---|---|
wyjście | wielowymiarowa tablica danych wyjściowych lub Buffer typów pierwotnych, w tym int, float, long i byte. Gdy Buffer jest używany, osoba wywołująca musi upewnić się, że jest ustawiona odpowiednia pozycja zapisu. Wartość null jest dozwolona i jest przydatna w pewnych przypadkach, np. jeśli wywołujący używa Delegate , który pozwala na interopcję obsługi bufora, a taki bufor został powiązany z wyjściowym Tensor (zobacz także Interpreter.Options#setAllowBufferHandleOutput(boolean) Tensor Tensor.asReadOnlyBuffer() |
Rzuty
Niedozwolony wyjątek Argument | jeśli input mają wartość NULL lub są puste lub jeśli podczas uruchamiania wnioskowania wystąpi błąd. |
---|---|
Niedozwolony wyjątek Argument | (EKSPERYMENTALNE, może ulec zmianie), jeśli wnioskowanie zostanie przerwane przez setCancelled(true) . |
public abstract void runForMultipleInputsOutputs ( Wejścia obiektu [] , Map < Integer , Obiekt > wyjścia)
Uruchamia wnioskowanie o modelu, jeśli model przyjmuje wiele danych wejściowych lub zwraca wiele danych wyjściowych.
Ostrzeżenie: interfejs API jest bardziej wydajny, jeśli Buffer
(najlepiej bezpośrednie, ale nie wymagane) są używane jako typy danych wejścia/wyjścia. Rozważ użycie funkcji Buffer
do przesyłania i pobierania danych pierwotnych w celu uzyskania lepszej wydajności. Obsługiwane są następujące konkretne typy Buffer
:
-
ByteBuffer
— kompatybilny z dowolnym pierwotnym typem tensora. -
FloatBuffer
- kompatybilny z tensorami typu float. -
IntBuffer
- kompatybilny z tensorami int32. -
LongBuffer
— kompatybilny z tensorami int64.
Buffer
s lub jako skalarne dane wejściowe. Uwaga: wartości null
dla poszczególnych elementów inputs
i outputs
są dozwolone tylko wtedy, gdy wywołujący używa Delegate
, który pozwala na interopcję obsługi bufora, a taki bufor został powiązany z odpowiednim Tensor
(ami) wejścia lub wyjścia.
Parametry
wejścia | tablica danych wejściowych. Dane wejściowe powinny być w tej samej kolejności, co dane wejściowe modelu. Każde wejście może być tablicą lub tablicą wielowymiarową albo Buffer pierwotnych typów, w tym int, float, long i byte. Buffer jest preferowanym sposobem przekazywania dużych danych wejściowych, podczas gdy typy ciągów wymagają użycia (wielowymiarowej) ścieżki wejściowej tablicy. Gdy Buffer jest używany, jego zawartość powinna pozostać niezmieniona, dopóki wnioskowanie o modelu nie zostanie zakończone, a wywołujący musi upewnić się, że Buffer znajduje się na odpowiedniej pozycji do odczytu. |
---|---|
wyjścia | mapowanie odwzorowania indeksów wyjściowych na wielowymiarowe tablice danych wyjściowych lub Buffer s typów pierwotnych, w tym int, float, long i byte. Musi tylko przechowywać wpisy dotyczące wyjść, które mają być używane. Gdy Buffer jest używany, osoba wywołująca musi upewnić się, że jest ustawiona odpowiednia pozycja zapisu. Mapa może być pusta w przypadkach, w których albo uchwyty bufora są używane do danych tensora wyjściowego, albo w przypadkach, gdy dane wyjściowe są kształtowane dynamicznie, a wywołujący musi zapytać wyjściowy kształt Tensor po wywołaniu wnioskowania, pobierając dane bezpośrednio z tensora wyjściowego ( przez Tensor.asReadOnlyBuffer() ). |
Rzuty
Niedozwolony wyjątek Argument | jeśli inputs mają wartość NULL lub są puste, jeśli outputs mają wartość NULL lub jeśli wystąpił błąd podczas uruchamiania wnioskowania. |
---|