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