InterpreterApi

interface pública InterpreterApi
Subclasses indiretas conhecidas

Interface para o interpretador de modelos do TensorFlow Lite, exceto métodos experimentais.

Uma instância InterpreterApi encapsula um modelo pré-treinado do TensorFlow Lite, em que operações são executadas para inferência de modelos.

Por exemplo, se um modelo usa apenas uma entrada e retorna apenas uma saída:

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

Se um modelo usa várias entradas ou saídas:

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

Se um modelo usa ou produz tensores de string:

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

Há uma distinção entre formato [] e forma[1]. Para tensor de string escalar saídas:

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

As ordens de entradas e saídas são determinadas ao converter o modelo do TensorFlow para o TensorFlowLite com o Toco, assim como as formas padrão das entradas.

Quando as entradas são fornecidas como matrizes (multidimensionais), os tensores de entrada correspondentes ser redimensionadas implicitamente de acordo com a forma dessa matriz. Quando as entradas são fornecidas como tipos Buffer, nenhum redimensionamento implícito é feito. o autor da chamada precisa garantir que o tamanho de byte Buffer corresponda ao do tensor correspondente ou que primeiro redimensione o tensor com resizeInput(int, int[]). As informações de tipo e formato do tensor podem ser extraído pela classe Tensor, disponível via getInputTensor(int) e getOutputTensor(int).

AVISO:as instâncias de InterpreterApi não são seguras para linhas de execução.

AVISO:uma instância do InterpreterApi tem recursos que precisam ser explicitamente liberado ao invocar close()

A biblioteca TFLite foi criada com a API NDK 19. Pode funcionar para APIs do Android de níveis anteriores ao 19. mas isso não é garantido.

Classes aninhadas

classe InterpreterApi.Options Uma classe de opções para controlar o comportamento do interpretador em tempo de execução.

Métodos públicos

abstrato anular
allocateTensors()
Atualiza explicitamente as alocações de todos os tensores, se necessário.
abstrato anular
close()
Liberar recursos associados à instância InterpreterApi.
estática InterpreterApi
create(opções de Arquivo modelFile, InterpreterApi.Options)
Cria uma instância de InterpreterApi usando o modelo e as opções especificados.
estática InterpreterApi
create(byteBuffer do ByteBuffer, opções InterpreterApi.Options)
Cria uma instância de InterpreterApi usando o modelo e as opções especificados.
abstrato int.
getInputIndex(String opName)
Recebe o índice de uma entrada conforme o nome da operação.
abstrato Tensor
getInputTensor(int inputIndex)
Recebe o tensor associado ao índice de entrada fornecido.
abstrato int.
getInputTensorCount()
Recebe o número de tensores de entrada.
abstrato Longo
getLastNativeInferenceDurationNanoseconds()
Retorna o tempo de inferência nativa.
abstrato int.
getOutputIndex(String opName)
Recebe o índice de uma saída, de acordo com o nome da operação.
abstrato Tensor
getOutputTensor(int outputIndex)
Recebe o tensor associado ao índice de saída fornecido.
abstrato int.
getOutputTensorCount()
Recebe o número de tensores de saída.
abstrato anular
resizeInput(int idx, int[] dims, boolean strict)
Redimensiona a entrada idx-th do modelo nativo para as cores determinadas.
abstrato anular
resizeInput(int idx, int[] esmaecido)
Redimensiona a entrada idx-th do modelo nativo para as cores determinadas.
abstrato anular
run(entrada de objeto, saída de objeto)
Executa a inferência de modelo se o modelo usar apenas uma entrada e fornecer apenas uma saída.
abstrato anular
runForMultipleInputsOutputs(entradas de Object[], saídas de Map<IntegerObject>)
Executa a inferência de modelo se o modelo recebe várias entradas ou retorna várias saídas.

Métodos herdados

Métodos públicos

públicas abstrato anular allocateTensors ()

Atualiza explicitamente as alocações de todos os tensores, se necessário.

Isso propagará formas e alocações de memória para tensores dependentes usando o formato(s) do tensor.

Observação: essa chamada é *puramente opcional*. A alocação de tensor vai ocorrer automaticamente durante a execução se quaisquer tensores de entrada tiverem sido redimensionados. Essa chamada é mais útil para determinar formas para quaisquer tensores de saída antes de executar o gráfico, por exemplo,

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

Observação: alguns gráficos têm saídas de formato dinâmico. Nesse caso, a forma final pode não se propagar totalmente até a inferência ser executada.

Gera
IllegalStateException caso os tensores do gráfico não possam ser alocados com sucesso.

públicas abstrato anular fechar ()

Liberar recursos associados à instância InterpreterApi.

públicas estática InterpreterApi criar (Arquivo modelFile, InterpreterApi.Options)

Cria uma instância de InterpreterApi usando o modelo e as opções especificados. O modelo será carregado de um arquivo.

Parâmetros
modelFile Um arquivo que contém um modelo pré-treinado do TF Lite.
opções Um conjunto de opções para personalizar o comportamento do intérprete.
Gera
IllegalArgumentException se modelFile não codificar um TensorFlow Lite válido um modelo de machine learning.

públicas estática InterpreterApi criar (ByteBuffer byteBuffer, InterpreterApi.Options opções)

Cria uma instância de InterpreterApi usando o modelo e as opções especificados. O modelo será lido de um ByteBuffer.

Parâmetros
byteBuffer Um modelo do TF Lite pré-treinado, em formato serializado binário. O ByteBuffer precisa ser modificada após a construção de uma instância de InterpreterApi. O ByteBuffer pode ser um MappedByteBuffer que mapeia um arquivo de modelo na memória ou um ByteBuffer direto de nativeOrder() que contém o conteúdo de bytes de um modelo.
opções Um conjunto de opções para personalizar o comportamento do intérprete.
Gera
IllegalArgumentException se byteBuffer não for um MappedByteBuffer nem um direto ByteBuffer de nativeOrder.

públicas abstrato int. getInputIndex (String opName)

Recebe o índice de uma entrada conforme o nome da operação.

Parâmetros
opName
Gera
IllegalArgumentException se opName não corresponder a nenhuma entrada no modelo usado para inicializar o intérprete.

públicas abstrato Tensor getInputTensor (int inputIndex)

Recebe o tensor associado ao índice de entrada fornecido.

Parâmetros
inputIndex
Gera
IllegalArgumentException se inputIndex for negativo ou não for menor que o o número de entradas do modelo.

públicas abstrato int. getInputTensorCount ()

Recebe o número de tensores de entrada.

públicas abstrato Longo getLastNativeInferenceDurationNanoseconds ()

Retorna o tempo de inferência nativa.

Gera
IllegalArgumentException se o modelo não for inicializado pelo intérprete.

públicas abstrato int. getOutputIndex (String opName)

Recebe o índice de uma saída, de acordo com o nome da operação.

Parâmetros
opName
Gera
IllegalArgumentException se opName não corresponder a nenhuma saída no modelo usado para inicializar o intérprete.

públicas abstrato Tensor getOutputTensor (int outputIndex)

Recebe o tensor associado ao índice de saída fornecido.

Observação: os detalhes do tensor de saída (por exemplo, formato) não podem ser totalmente preenchidos até que a inferência seja concluída. é executado. Se você precisar de detalhes atualizados *antes* de executar a inferência (por exemplo, depois de redimensionar um tensor de entrada, o que pode invalidar os formatos do tensor de saída), use allocateTensors() para acionar explicitamente a alocação e a propagação de formas. Para gráficos com formas de saída que dependem dos *valores* de entrada, o formato da saída pode não ser totalmente determinado até que inferência em execução.

Parâmetros
outputIndex
Gera
IllegalArgumentException se outputIndex for negativo ou não for menor que o o número de saídas do modelo.

públicas abstrato int. getOutputTensorCount ()

Recebe o número de tensores de saída.

públicas abstrato anular resizeInput (int idx, int[] dims, booleano strict)

Redimensiona a entrada idx-th do modelo nativo para as cores determinadas.

Quando "strict" é definido como "True", apenas dimensões desconhecidas podem ser redimensionadas. Dimensões desconhecidas são indicado como `-1` na matriz retornada por `Tensor.shapeSignature()`.

Parâmetros
IDX
escurece
restrito
Gera
IllegalArgumentException se idx for negativo ou não for menor que o número de entradas de modelo, ou se ocorrer um erro ao redimensionar a entrada idx-th. Além disso, o erro ocorre ao tentar redimensionar um tensor com dimensões fixas quando "strict" é verdadeiro.

públicas abstrato anular resizeInput (int idx, int[] esmaecidos)

Redimensiona a entrada idx-th do modelo nativo para as cores determinadas.

Parâmetros
IDX
escurece
Gera
IllegalArgumentException se idx for negativo ou não for menor que o número de entradas de modelo, ou se ocorrer um erro ao redimensionar a entrada idx-th.

públicas abstrato anular executar (Entrada de objeto, saída de objeto)

Executa a inferência de modelo se o modelo usar apenas uma entrada e fornecer apenas uma saída.

Aviso: a API será mais eficiente se um Buffer (de preferência direto, mas não obrigatório). é usado como o tipo de dados de entrada/saída. Use Buffer para alimentar e buscar dados primitivos para um melhor desempenho. Os tipos de Buffer concretos a seguir são suportado:

  • ByteBuffer: compatível com qualquer tipo primitivo de Tensor subjacente.
  • FloatBuffer: compatível com tensores flutuantes.
  • IntBuffer: compatível com tensores int32.
  • LongBuffer: compatível com tensores int64.
. Os tipos booleanos são aceitos apenas como matrizes, e não como Buffers ou como entradas escalares.

Parâmetros
entrada uma matriz ou matriz multidimensional, ou um Buffer de tipos primitivos incluindo int, float, long e byte. Buffer é a maneira preferencial de transmitir dados de entrada para tipos primitivos, enquanto os tipos de string exigem o uso do método (multidimensional) caminho de entrada da matriz. Quando um Buffer é usado, o conteúdo dele deve permanecer inalterado até a inferência do modelo é feita, e o autor da chamada precisa garantir que Buffer esteja no na posição de leitura apropriada. Um valor null só será permitido se o autor da chamada estiver usando uma Delegate, que permite a interoperabilidade do gerenciador de buffer, e esse buffer foi vinculado à entrada Tensor.
output uma matriz multidimensional de dados de saída ou um Buffer de tipos primitivos incluindo int, float, long e byte. Quando um Buffer é usado, o autor da chamada precisa garantir a posição de gravação apropriada. Um valor nulo é permitido e é útil para em certos casos, por exemplo, se o autor da chamada estiver usando um Delegate que permite o identificador de buffer interoperabilidade, e esse buffer foi vinculado à saída Tensor (consulte também Interpreter.Options#setAllowBufferHandleOutput(boolean)), ou se o grafo tiver saídas de formato dinâmico e o autor da chamada precisar consultar a forma Tensor de saída após a invocação da inferência, buscando os dados diretamente da saída (usando Tensor.asReadOnlyBuffer()).
Gera
IllegalArgumentException se input for nulo ou vazio, ou se ocorrer um erro ao inferência em execução.
IllegalArgumentException (EXPERIMENTAL, sujeito a alterações) se a inferência for interrompido por setCancelled(true).

públicas abstrato anular runForMultipleInputsOutputs (Entradas de objeto[], saída do mapa <número inteiroobjeto>)

Executa a inferência de modelo se o modelo recebe várias entradas ou retorna várias saídas.

Aviso: a API será mais eficiente se Buffers (de preferência direta, mas não obrigatória). são usados como tipos de dados de entrada/saída. Use Buffer para alimentar e buscar dados primitivos para um melhor desempenho. Os tipos de Buffer concretos a seguir são suportado:

  • ByteBuffer: compatível com qualquer tipo primitivo de Tensor subjacente.
  • FloatBuffer: compatível com tensores flutuantes.
  • IntBuffer: compatível com tensores int32.
  • LongBuffer: compatível com tensores int64.
. Os tipos booleanos são aceitos apenas como matrizes, e não como Buffers ou como entradas escalares.

Observação: os valores null para elementos individuais de inputs e outputs são permitido somente se o autor da chamada estiver usando um Delegate que permita a interoperabilidade do gerenciador de buffer; esse buffer foi vinculado às Tensor de entrada ou saída correspondentes.

Parâmetros
escondidas uma matriz de dados de entrada. As entradas devem estar na mesma ordem que as entradas do um modelo de machine learning. Cada entrada pode ser uma matriz ou uma matriz multidimensional, ou um Buffer de tipos primitivos, incluindo int, float, long e byte. Buffer é a forma recomendada para transmitir grandes dados de entrada, enquanto os tipos de string exigem o uso de uma matriz (multidimensional) caminho de entrada. Quando Buffer é usado, o conteúdo dele precisa permanecer inalterado até que o modelo a inferência seja feita, e o autor da chamada precisa garantir que o Buffer esteja no ler a posição.
saídas um mapeamento de índices de saída para matrizes multidimensionais de dados de saída ou Buffers de tipos primitivos, incluindo int, float, long e byte. Ele só precisa manter entradas para as saídas a serem usadas. Quando um Buffer é usado, o autor da chamada precisa garantir a posição de gravação apropriada. O mapa poderá ficar vazio nos casos em que são usados para dados de tensor de saída, ou casos em que as saídas são dinamicamente shaped e o autor da chamada precisa consultar a forma Tensor de saída depois que a inferência for invocado, buscando os dados diretamente do tensor de saída (via Tensor.asReadOnlyBuffer()).
Gera
IllegalArgumentException se inputs for nulo ou vazio, se outputs for nulo ou se um erro ocorrer ao executar a inferência.