| Znane podklasy pośrednie |
Interfejs do interpretera modelu TensorFlow Lite, z wyłączeniem metod eksperymentalnych.
Instancja InterpreterApi zawiera wytrenowany model TensorFlow Lite, w którym
wykonywane są operacje wnioskowania na podstawie modelu.
Jeśli na przykład model przyjmuje tylko 1 dane wejściowe i zwraca tylko jedno dane wyjściowe:
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 przyjmuje lub generuje 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 (InterpreterApi interpreter =
new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
interpreter.runForMultipleInputsOutputs(input, output);
}
Istnieje rozróżnienie między kształtem [] a kształtem[1]. Skalarny tensor ciągu znaków dane wyjściowe:
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ść danych wejściowych i wyjściowych jest określana podczas konwertowania modelu TensorFlow na TensorFlowLite z modelem Toco, a także domyślne kształty danych wejściowych.
Jeśli dane wejściowe są podane jako (wielowymiarowe) tablice, odpowiednie tensory wejściowe będą
zostanie niejawnie przeskalowana odpowiednio do kształtu tej tablicy. Jeśli dane wejściowe są podane w typach Buffer, nie wprowadza się niejawna zmiana rozmiaru. element wywołujący musi upewnić się, że rozmiar w bajtach Buffer jest zgodny z rozmiarem odpowiedniego tensora lub że rozmiar
zmień rozmiar tensora za pomocą funkcji resizeInput(int, int[]). Informacje o kształcie i typie Tensor można
uzyskane w ramach klasy Tensor, dostępne poprzez getInputTensor(int) i getOutputTensor(int).
OSTRZEŻENIE: instancje InterpreterApi nie są bezpieczne w przypadku wątków.
OSTRZEŻENIE: instancja InterpreterApi zawiera zasoby, które muszą być
jawnie zwolnione przez wywołanie close()
Biblioteka TFLite jest oparta na interfejsie NDK API 19. Może działać w przypadku interfejsów API Androida poniżej 19, ale nie jest to gwarantowane.
Zagnieżdżone klasy
| klasa | InterpreterApi.Options | Klasa opcji do kontrolowania działania interpretera czasu działania. | |
Metody publiczne
| abstrakcyjne nieważne |
allocateTensors()
W razie potrzeby jawnie aktualizuje przydziały wszystkich tensorów.
|
| abstrakcyjne nieważne |
close()
Zwolnij zasoby powiązane z instancją
InterpreterApi. |
| statyczny InterpreterApi |
create(Plik modelFile, opcje InterpreterApi.Options)
Konstruuje instancję
InterpreterApi przy użyciu podanego modelu i opcji. |
| statyczny InterpreterApi |
create(opcje ByteBuffer byteBuffer, InterpreterApi.Options)
Konstruuje instancję
InterpreterApi przy użyciu podanego modelu i opcji. |
| abstrakcyjne int, |
getInputIndex(nazwa opcji ciąg znaków)
Pobiera indeks danych wejściowych o nazwie operacji dla danych wejściowych.
|
| abstrakcyjne Tensor |
getInputTensor(int inputIndex)
Pobiera Tensor powiązany z podanym indeksem danych wejściowych.
|
| abstrakcyjne int, |
getInputTensorCount()
Pobiera liczbę tensorów wejściowych.
|
| abstrakcyjne Długi |
getLastNativeInferenceDurationNanoseconds()
Zwraca czas wnioskowania natywnego.
|
| abstrakcyjne int, |
getOutputIndex(opName ciągu)
Pobiera indeks danych wyjściowych o nazwie operacji w danych wyjściowych.
|
| abstrakcyjne Tensor |
getOutputTensor(int outputIndex)
Pobiera Tensor powiązany z podanym indeksem wyjściowym.
|
| abstrakcyjne int, |
getOutputTensorCount()
Pobiera liczbę wyjściowych tensorów.
|
| abstrakcyjne nieważne |
resizeInput(int idx, int[] dims, boolean strict)
Zmienia rozmiar danych wejściowych modelu natywnego (IDX).
|
| abstrakcyjne nieważne |
resizeInput(int idx, int[] przyciemnione)
Zmienia rozmiar danych wejściowych modelu natywnego (IDX).
|
| abstrakcyjne nieważne | |
| abstrakcyjne nieważne |
runForMultipleInputsOutputs(dane wejściowe Object[], dane wyjściowe Map <Liczba całkowita, Obiekt>)
Uruchamia wnioskowanie przez model, jeśli model przyjmuje wiele danych wejściowych, lub zwraca wiele danych wyjściowych.
|
Metody dziedziczone
Metody publiczne
publiczne abstrakcyjne nieważne . allocateTensors ()
W razie potrzeby jawnie aktualizuje przydziały wszystkich tensorów.
Spowoduje to rozpowszechnienie kształtów i alokacji pamięci dla tensorów zależnych z użyciem danych wejściowych podane kształty tensora.
Uwaga: to połączenie jest *wyłącznie opcjonalne*. Alokacja Tensor będzie wykonywana automatycznie podczas po zmianie rozmiaru tensorów wejściowych. To połączenie jest najbardziej przydatne przy określaniu kształtów dowolnych tensorów wyjściowych przed wykonaniem grafu, 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: dane wyjściowe niektórych wykresów mają dynamicznie kształtowane dane wyjściowe. W takim przypadku kształt wyjściowy może nie w pełni propagować do momentu wykonania wnioskowania.
Rzuty
| IllegalStateException | jeśli nie można przydzielić tensorów grafu. |
|---|
publiczne abstrakcyjne nieważne . zamknij ()
Zwolnij zasoby powiązane z instancją InterpreterApi.
publiczne statyczny InterpreterApi utwórz (Plik modelu, opcje InterpreterApi.Options)
Konstruuje instancję InterpreterApi przy użyciu podanego modelu i opcji. Model
zostanie wczytana z pliku.
Parametry
| modelFile | Plik zawierający wytrenowany model TF Lite. |
|---|---|
| Opcje | Zestaw opcji umożliwiających dostosowanie działania tłumacza. |
Rzuty
| IllegalArgumentException | jeśli modelFile nie koduje prawidłowego TensorFlow Lite
model atrybucji.
|
|---|
publiczne statyczny InterpreterApi utwórz (ByteBuffer byteBuffer, InterpreterApi.Options)
Konstruuje instancję InterpreterApi przy użyciu podanego modelu i opcji. Model
zostanie odczytany z urządzenia ByteBuffer.
Parametry
| byteBuffer | Wstępnie wytrenowany model TF Lite w postaci binarnej zserializowanej. ByteBuffer powinien
nie może zostać zmodyfikowana po utworzeniu instancji InterpreterApi. Obiekt ByteBuffer może być obiektem typu MappedByteBuffer, który mapuje w pamięci plik modelu,
bezpośrednie polecenie ByteBuffer funkcji natywnychOrder(), które zawierają treść bajtów modelu. |
|---|---|
| Opcje | Zestaw opcji umożliwiających dostosowanie działania tłumacza. |
Rzuty
| IllegalArgumentException | jeśli byteBuffer nie jest wartością MappedByteBuffer ani a
bezpośrednie ByteBuffer obiektu NativeOrder.
|
|---|
publiczne abstrakcyjne int, . getInputIndex (Ciąg opName)
Pobiera indeks danych wejściowych o nazwie operacji dla danych wejściowych.
Parametry
| opName |
|---|
Rzuty
| IllegalArgumentException | jeśli opName nie pasuje do żadnych danych wejściowych w używanym modelu
aby zainicjować tłumacza.
|
|---|
publiczne abstrakcyjne Tensor getInputTensor (int inputIndex)
Pobiera Tensor powiązany z podanym indeksem danych wejściowych.
Parametry
| inputIndex |
|---|
Rzuty
| IllegalArgumentException | jeśli inputIndex jest ujemny lub nie jest mniejszy niż
liczby wejściowej modelu.
|
|---|
publiczne abstrakcyjne int, . getInputTensorCount ()
Pobiera liczbę tensorów wejściowych.
publiczne abstrakcyjne Długi getLastNativeInferenceDurationNanoseconds ()
Zwraca czas wnioskowania natywnego.
Rzuty
| IllegalArgumentException | jeśli model nie został zainicjowany przez interpreter. |
|---|
publiczne abstrakcyjne int, . getOutputIndex (Ciąg opName)
Pobiera indeks danych wyjściowych o nazwie operacji w danych wyjściowych.
Parametry
| opName |
|---|
Rzuty
| IllegalArgumentException | jeśli opName nie pasuje do żadnych danych wyjściowych w używanym modelu
aby zainicjować tłumacza.
|
|---|
publiczne abstrakcyjne Tensor getOutputTensor (int outputIndex)
Pobiera Tensor powiązany z podanym indeksem wyjściowym.
Uwaga: szczegóły tensora wyjściowego (np.kształt) mogą nie zostać w pełni wypełnione do czasu wnioskowania.
. Jeśli potrzebujesz aktualizacji szczegółów *przed* uruchomieniem wnioskowania (np. po zmianie rozmiaru
tensor wejściowy, który może unieważnić kształty tensora wyjściowego), użyj funkcji allocateTensors(), aby
bezpośrednio aktywować przydzielanie i propagację kształtu. Pamiętaj, że w przypadku wykresów z kształtami wyjściowymi
zależne od *wartości* wejściowych, kształt wyjściowy może zostać w pełni określony dopiero
aktywnego wnioskowania.
Parametry
| outputIndex |
|---|
Rzuty
| IllegalArgumentException | jeśli outputIndex jest ujemny lub nie jest mniejszy niż
liczby wyników modelu.
|
|---|
publiczne abstrakcyjne int, . getOutputTensorCount ()
Pobiera liczbę wyjściowych tensorów.
publiczne abstrakcyjne nieważne . resizeInput (int idx, int[] dims, rygorystyczna wartość logiczna)
Zmienia rozmiar danych wejściowych modelu natywnego (IDX).
Gdy tryb „rygorystyczny” ma wartość Prawda, można zmieniać rozmiar tylko nieznanych wymiarów. Nieznane wymiary to jest wskazywany jako „–1” w tablicy zwracanej przez funkcję „Tensor.shapeSignature()”.
Parametry
| Identyfikatorx | |
|---|---|
| Przyciemnia | |
| dokładny |
Rzuty
| IllegalArgumentException | jeśli idx jest ujemny lub nie jest mniejszy niż liczba
danych wejściowych modelu; lub jeśli podczas zmiany rozmiaru danych wejściowych idx-th wystąpi błąd. Dodatkowo błąd
ma miejsce podczas próby zmiany rozmiaru tensora o stałych wymiarach, gdy tryb „strict” ma wartość True.
|
|---|
publiczne abstrakcyjne nieważne . resizeInput (int idx, int[] przyciemnione)
Zmienia rozmiar danych wejściowych modelu natywnego (IDX).
Parametry
| Identyfikatorx | |
|---|---|
| Przyciemnia |
Rzuty
| IllegalArgumentException | jeśli idx jest ujemny lub nie jest mniejszy niż liczba
danych wejściowych modelu; lub jeśli podczas zmiany rozmiaru danych wejściowych idx-th wystąpi błąd.
|
|---|
publiczne abstrakcyjne nieważne . bieg (Dane wejściowe obiektu, dane wyjściowe Object)
Uruchamia wnioskowanie przez model, jeśli model przyjmuje tylko 1 dane wejściowe i udostępnia tylko 1 dane wyjściowe.
Ostrzeżenie: interfejs API jest wydajniejszy, jeśli Buffer (najlepiej bezpośredni, ale nie wymagany)
jest używany jako typ danych wejściowych/wyjściowych. Zastanów się nad użyciem atrybutu Buffer do plików danych i pobierania
podstawowych danych
w celu zwiększenia wydajności. Oto konkretne typy Buffer
obsługiwane:
ByteBuffer– zgodność z dowolnym podstawowym typem Tensor.FloatBuffer– kompatybilny z tensorami pływackimi.IntBuffer– zgodny z procesorami Tensor int32.LongBuffer– zgodny z procesorami Tensor int64.
Buffer lub jako dane wejściowe skalarne.Parametry
| dane wejściowe | tablica lub tablica wielowymiarowa albo Buffer typów podstawowych
int, float, long i byte. Buffer to preferowany sposób przesyłania dużych
danych wejściowych dla typów podstawowych, natomiast typy ciągów znaków wymagają użycia funkcji (wielowymiarowe)
tablicowa ścieżka wejściowa. Kiedy używana jest właściwość Buffer, jej zawartość powinna pozostać niezmieniona do
sugerowanie modelu i element wywołujący musi upewnić się, że Buffer jest w
w odpowiednim miejscu do czytania. Wartość null jest dozwolona tylko wtedy, gdy osoba wywołująca używa funkcji
Delegate, który pozwala na interoperacyjność uchwytu bufora i taki bufor został powiązany z
wpisz Tensor. |
|---|---|
| output | wielowymiarowa tablica danych wyjściowych lub Buffer typów podstawowych
int, float, long i byte. Gdy używane jest Buffer, osoba wywołująca musi upewnić się, że:
że jest ustawiona odpowiednia pozycja zapisu. Wartość null jest dozwolona i jest przydatna dla
w określonych przypadkach, np.gdy rozmówca używa funkcji Delegate, która umożliwia buforowanie.
współpracy i taki bufor został powiązany z danymi wyjściowymi Tensor (zobacz też Interpreter.Options#setAllowBufferHandleOutput(boolean)).
lub jeśli dane wyjściowe grafu mają dynamicznie kształtowane dane wyjściowe, a element wywołujący po wywołaniu wnioskowania musi przesłać zapytanie dotyczące kształtu wyjściowego Tensor, pobierając je bezpośrednio z tych danych.
Tensor (przez Tensor.asReadOnlyBuffer()). |
Rzuty
| IllegalArgumentException | jeśli input ma wartość null lub jest pusty albo jeśli wystąpi błąd, gdy
aktywnego wnioskowania. |
|---|---|
| IllegalArgumentException | (EKSPERYMENTALNE, może ulec zmianie), jeśli wnioskowanie jest
przerwany przez: setCancelled(true).
|
publiczne abstrakcyjne nieważne . runForMultipleInputsOutputs (dane wejściowe obiektu[], dane wyjściowe mapy <liczby całkowitej, obiekt>)
Uruchamia wnioskowanie przez model, jeśli model przyjmuje wiele danych wejściowych, lub zwraca wiele danych wyjściowych.
Ostrzeżenie: interfejs API jest bardziej wydajny, jeśli interfejs Buffer (najlepiej bezpośredni, ale nie jest wymagany)
są używane jako typy danych wejściowych/wyjściowych. Zastanów się nad użyciem atrybutu Buffer do plików danych i pobierania
podstawowych danych
w celu zwiększenia wydajności. Oto konkretne typy Buffer
obsługiwane:
ByteBuffer– zgodność z dowolnym podstawowym typem Tensor.FloatBuffer– kompatybilny z tensorami pływackimi.IntBuffer– zgodny z procesorami Tensor int32.LongBuffer– zgodny z procesorami Tensor int64.
Buffer lub jako dane wejściowe skalarne.
Uwaga: wartości parametru null w elementach inputs i outputs to
dozwolone tylko wtedy, gdy wywołujący obiekt używa Delegate, który umożliwia współdziałanie uchwytu bufora;
taki bufor został powiązany z odpowiednimi danymi wejściowymi lub wyjściowymi Tensor.
Parametry
| dane wejściowe | tablicę danych wejściowych. Dane wejściowe powinny być w tej samej kolejności co dane wejściowe funkcji
model atrybucji. Każde dane wejściowe mogą być tablicą lub wielowymiarową tablicą albo obiektem Buffer
podstawowych typów, takich jak int, float, long i byte. Buffer to preferowany sposób
do przekazywania dużych danych wejściowych, natomiast typy ciągów znaków wymagają stosowania (wielowymiarowej) tablicy
ścieżkę wejściową. Gdy jest używana funkcja Buffer, jej zawartość powinna pozostać niezmieniona do czasu użycia modelu
wnioskowania i element wywołujący musi upewnić się, że Buffer jest w odpowiednim miejscu
pozycji odczytu. |
|---|---|
| dane wyjściowe | dane wyjściowe mapowania map indeksują wielowymiarowe tablice danych wyjściowych lub elementów Buffer typów podstawowych, w tym int, float, long i byte. Wystarczy zachować
wskazuje dane wyjściowe, które mają być używane. Gdy używane jest Buffer, osoba wywołująca musi upewnić się, że:
że jest ustawiona odpowiednia pozycja zapisu. Mapa może być pusta w przypadkach, gdy:
uchwyty bufora są używane w przypadku danych tensora wyjściowego lub w sytuacjach, gdy dane wyjściowe są dynamicznie generowane
ma kształt i element wywołujący musi przesłać zapytanie dotyczące wyjściowego kształtu Tensor po zastosowaniu wnioskowania
Dane są pobierane bezpośrednio z tensora wyjściowego (przez Tensor.asReadOnlyBuffer()). |
Rzuty
| IllegalArgumentException | jeśli inputs ma wartość null lub jest pusty, jeśli outputs to
wartość null lub jeśli podczas uruchamiania wnioskowania wystąpi błąd.
|
|---|