Ajuda a proteger a Grande Barreira de Corais com TensorFlow em Kaggle Junte Desafio

Interpreter

intérprete de aula final pública

Classe de driver para conduzir a inferência de modelo com TensorFlow Lite.

Um Interpreter encapsula um modelo pré-treinado do TensorFlow Lite, no qual as operações são executadas para inferência do modelo.

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

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

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

Object[] inputs = {input0, input1, ...;
 Map 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);
 }
 }

Se um modelo leva 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 (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, output);
 }
 }

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

Quando as entradas são fornecidas como matrizes (multidimensionais), os tensores de entrada correspondentes serão redimensionados implicitamente de acordo com a forma dessa matriz. Quando as entradas são fornecidas como tipos de Buffer , nenhum redimensionamento implícito é feito; o chamador deve garantir que o tamanho do byte do Buffer corresponda ao do tensor correspondente ou que ele primeiro redimensione o tensor via resizeInput(int, int[]) . A forma do tensor e as informações de tipo podem ser obtidas por meio da classe Tensor , disponível por meio de getInputTensor(int) e getOutputTensor(int) .

AVISO: as instâncias de um Interpreter não são thread-safe. Um Interpreter possui recursos que devem ser liberados explicitamente invocando close()

A biblioteca TFLite é construída com base no NDK API 19. Ela pode funcionar para níveis de API do Android abaixo de 19, mas não é garantida.

Nota: esta classe não é thread-safe.

Classes aninhadas

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

Construtores Públicos

Intérprete (arquivo modelFile)
Inicializa um Interpreter
Intérprete (arquivo modelFile, int numThreads)
Este construtor foi descontinuado no nível da API. Prefira usar o construtor Interpreter(File, Options) . Este método será removido em uma versão futura.
Intérprete (Arquivo modelFile, opções Interpreter.Opções )
Inicializa um Interpreter e especifica o número de threads usados ​​para inferência.
Intérprete (ByteBuffer byteBuffer)
Inicializa um Interpreter com um ByteBuffer de um arquivo de modelo.
Intérprete (ByteBuffer byteBuffer, int numThreads)
Este construtor foi descontinuado no nível da API. Prefira usar o construtor Interpreter(ByteBuffer, Options) . Este método será removido em uma versão futura.
Intérprete (MappedByteBuffer mappedByteBuffer)
Este construtor foi descontinuado no nível da API. Prefira usar o construtor Interpreter(ByteBuffer, Options) . Este método será removido em uma versão futura.
Intérprete (opções ByteBuffer byteBuffer, Interpreter.Options )
Inicializa um Interpreter com um ByteBuffer de um arquivo de modelo e um conjunto de Interpreter.Options personalizados.

Métodos Públicos

vazio
alocateTensors ()
Atualiza detalhadamente as alocações para todos os tensores, se necessário.
vazio
fechar ()
Libere recursos associados ao Interpreter .
int
getInputIndex (String opName)
Obtém o índice de uma entrada, dado o nome da operação da entrada.
Tensor
getInputTensor (int inputIndex)
Obtém o tensor associado ao índice de entrada fornecido.
int
getInputTensorCount ()
Obtém o número de tensores de entrada.
Tensor
getInputTensorFromSignature (String inputName, String methodName)
Obtém o Tensor associado ao nome de entrada fornecido e ao nome do método de assinatura.
Longo
getLastNativeInferenceDurationNanoseconds ()
Retorna o tempo de inferência nativa.
int
getOutputIndex (String opName)
Obtém o índice de uma saída dado o nome da operação da saída.
Tensor
getOutputTensor (int outputIndex)
Obtém o tensor associado ao índice de saída provado.
int
getOutputTensorCount ()
Obtém o número de tensores de saída.
Tensor
getOutputTensorFromSignature (String outputName, String methodName)
Obtém o tensor associado ao nome de saída provado no método de assinatura específico.
Fragmento[]
getSignatureDefNames ()
Obtém a lista de nomes de métodos exportados de SignatureDef disponíveis no modelo.
Fragmento[]
getSignatureInputs (String methodName )
Obtém a lista de entradas SignatureDefs para o método methodName

AVISO: esta é uma API experimental e está sujeita a alterações.

Fragmento[]
getSignatureOutputs (String methodName )
Obtém a lista de saídas de SignatureDefs para o método methodName

AVISO: esta é uma API experimental e está sujeita a alterações.

vazio
modifyGraphWithDelegate ( delegado delegado)
Este método foi descontinuado no nível da API. Prefira usar addDelegate(Delegate) para fornecer delegados no momento da criação. Este método será removido em uma versão futura.
vazio
resetVariableTensors ()
Avançado: restaura todos os tensores variáveis ​​para o valor padrão.
vazio
resizeInput (int idx, int [] dims, boolean estrito)
Redimensiona a entrada idx-th do modelo nativo para os escurecimentos fornecidos.
vazio
resizeInput (int idx, int [] dims)
Redimensiona a entrada idx-th do modelo nativo para os escurecimentos fornecidos.
vazio
executar (entrada de objeto, saída de objeto)
Executa a inferência do modelo se o modelo aceita apenas uma entrada e fornece apenas uma saída.
vazio
runForMultipleInputsOutputs (entradas Object [], saídas Map <Integer, Object>)
Executa a inferência do modelo se o modelo recebe várias entradas ou retorna várias saídas.
vazio
runSignature (entradas Map <String, Object>, saídas Map <String, Object>)
vazio
runSignature (entradas Map <String, Object>, saídas Map <String, Object>, String methodName)
Executa inferência de modelo com base em SignatureDef fornecida por meio de @code methodName.
vazio
setCancelled (boolean cancelado)
Avançado: interrompe a inferência no meio de uma chamada para run(Object, Object) .
vazio
setNumThreads (int numThreads)
Este método foi descontinuado no nível da API. Prefira usar setNumThreads(int) diretamente para controlar multi-threading de thread. Este método será removido em uma versão futura.

Métodos herdados

Construtores Públicos

intérprete público (arquivo modelFile)

Inicializa um Interpreter

Lança
Exceção de argumento ilegal se modelFile não codificar um modelo válido do TensorFlow Lite.

public Interpreter (arquivo modelFile, int numThreads)

Este construtor foi descontinuado no nível da API .
Prefira usar o construtor Interpreter(File, Options) . Este método será removido em uma versão futura.

Inicializa um Interpreter e especifica o número de threads usados ​​para inferência.

public Interpreter (File modelFile, Interpreter.Options options)

Inicializa um Interpreter e especifica o número de threads usados ​​para inferência.

Lança
Exceção de argumento ilegal se modelFile não codificar um modelo válido do TensorFlow Lite.

intérprete público (ByteBuffer byteBuffer)

Inicializa um Interpreter com um ByteBuffer de um arquivo de modelo.

O ByteBuffer não deve ser modificado após a construção de um Interpreter . O ByteBuffer pode ser um MappedByteBuffer que MappedByteBuffer memória um arquivo de modelo ou um ByteBuffer direto de nativeOrder () que contém o conteúdo de bytes de um modelo.

Lança
Exceção de argumento ilegal se byteBuffer não for um MappedByteBuffer nem um ERROR(/Bytebuffer) direto ERROR(/Bytebuffer) de nativeOrder.

public Interpreter (ByteBuffer byteBuffer, int numThreads)

Este construtor foi descontinuado no nível da API .
Prefira usar o construtor Interpreter(ByteBuffer, Options) . Este método será removido em uma versão futura.

Inicializa um Interpreter com um ByteBuffer de um arquivo de modelo e especifica o número de threads usados ​​para inferência.

O ByteBuffer não deve ser modificado após a construção de um Interpreter . O ByteBuffer pode ser um MappedByteBuffer que MappedByteBuffer memória um arquivo de modelo ou um ByteBuffer direto de nativeOrder () que contém o conteúdo de bytes de um modelo.

public Interpreter (MappedByteBuffer mappedByteBuffer)

Este construtor foi descontinuado no nível da API .
Prefira usar o construtor Interpreter(ByteBuffer, Options) . Este método será removido em uma versão futura.

Inicializa um Interpreter com um MappedByteBuffer para o arquivo de modelo.

O MappedByteBuffer deve permanecer inalterado após a construção de um Interpreter .

public Interpreter (ByteBuffer byteBuffer, opções de Interpreter.Options )

Inicializa um Interpreter com um ByteBuffer de um arquivo de modelo e um conjunto de Interpreter.Options personalizados.

O ByteBuffer não deve ser modificado após a construção de um Interpreter . O ByteBuffer pode ser um MappedByteBuffer que MappedByteBuffer memória um arquivo de modelo ou um ByteBuffer direto de nativeOrder () que contém o conteúdo de bytes de um modelo.

Lança
Exceção de argumento ilegal se byteBuffer não for um MappedByteBuffer nem um ERROR(/Bytebuffer) direto ERROR(/Bytebuffer) de nativeOrder.

Métodos Públicos

public void allocateTensors ()

Atualiza detalhadamente as alocações para todos os tensores, se necessário.

Isso propagará formas e alocações de memória para todos os tensores dependentes usando a (s) forma (s) de tensor de entrada conforme fornecido.

Observação: esta chamada é * puramente opcional *. A alocação do tensor ocorrerá automaticamente durante a execução se qualquer tensor de entrada tiver sido redimensionado. Esta chamada é mais útil para determinar as formas de 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...
 }

Lança
IllegalStateException se os tensores do gráfico não puderam ser alocados com sucesso.

public void close ()

Libere recursos associados ao Interpreter .

public int getInputIndex (String opName)

Obtém o índice de uma entrada, dado o nome da operação da entrada.

Lança
Exceção de argumento ilegal se opName não corresponder a nenhuma entrada no modelo usado para inicializar o Interpreter .

public Tensor getInputTensor (int inputIndex)

Obtém o tensor associado ao índice de entrada fornecido.

Lança
Exceção de argumento ilegal se inputIndex for negativo ou não for menor que o número de entradas do modelo.

public int getInputTensorCount ()

Obtém o número de tensores de entrada.

public Tensor getInputTensorFromSignature (String inputName, String methodName)

Obtém o Tensor associado ao nome de entrada fornecido e ao nome do método de assinatura.

Parâmetros
inputName Nome de entrada na assinatura.
methodName O nome do método exportado que identifica o SignatureDef, pode ser nulo se o modelo tiver uma assinatura.
Lança
Exceção de argumento ilegal se inputName ou methodName é nulo ou vazio, ou nome inválido fornecido.

AVISO: esta é uma API experimental e está sujeita a alterações.

public Long getLastNativeInferenceDurationNanoseconds ()

Retorna o tempo de inferência nativa.

Lança
Exceção de argumento ilegal se o modelo não for inicializado pelo Interpreter .

public int getOutputIndex (String opName)

Obtém o índice de uma saída, dado o nome da operação da saída.

Lança
Exceção de argumento ilegal se opName não corresponder a nenhuma saída no modelo usado para inicializar o Interpreter .

public Tensor getOutputTensor (int outputIndex)

Obtém o tensor associado ao índice de saída provado.

Nota: Os detalhes do tensor de saída (por exemplo, forma) podem não ser totalmente preenchidos até que a inferência seja executada. Se você precisar de detalhes atualizados * antes * de executar a inferência (por exemplo, após redimensionar um tensor de entrada, o que pode invalidar as formas do tensor de saída), use allocateTensors() para acionar explicitamente a alocação e a propagação da forma. Observe que, para gráficos com formas de saída que dependem dos valores de entrada * *, a forma de saída pode não ser totalmente determinada até a inferência executada.

Lança
Exceção de argumento ilegal se outputIndex for negativo ou não for menor que o número de saídas do modelo.

public int getOutputTensorCount ()

Obtém o número de tensores de saída.

public Tensor getOutputTensorFromSignature (String outputName, String methodName)

Obtém o tensor associado ao nome de saída provado no método de assinatura específico.

Nota: Os detalhes do tensor de saída (por exemplo, forma) podem não ser totalmente preenchidos até que a inferência seja executada. Se você precisar de detalhes atualizados * antes * de executar a inferência (por exemplo, após redimensionar um tensor de entrada, o que pode invalidar as formas do tensor de saída), use allocateTensors() para acionar explicitamente a alocação e a propagação da forma. Observe que, para gráficos com formas de saída que dependem dos valores de entrada * *, a forma de saída pode não ser totalmente determinada até a execução da inferência.

Parâmetros
outputName Nome de saída na assinatura.
methodName O nome do método exportado que identifica o SignatureDef, pode ser nulo se o modelo tiver uma assinatura.
Lança
Exceção de argumento ilegal se outputName ou methodName é nulo ou vazio, ou nome inválido fornecido.

AVISO: esta é uma API experimental e está sujeita a alterações.

public String [] getSignatureDefNames ()

Obtém a lista de nomes de métodos exportados de SignatureDef disponíveis no modelo.

AVISO: esta é uma API experimental e está sujeita a alterações.

public String [] getSignatureInputs (String methodName)

Obtém a lista de entradas SignatureDefs para o método methodName

AVISO: esta é uma API experimental e está sujeita a alterações.

public String [] getSignatureOutputs (String methodName)

Obtém a lista de saídas de SignatureDefs para o método methodName

AVISO: esta é uma API experimental e está sujeita a alterações.

public void modifyGraphWithDelegate ( Delegado delegado)

Este método foi descontinuado no nível da API .
Prefira usar addDelegate(Delegate) para fornecer delegados no momento da criação. Este método será removido em uma versão futura.

Avançado: modifica o gráfico com o Delegate fornecido.

Lança
Exceção de argumento ilegal se ocorrer erro ao modificar o gráfico com delegate .

public void resetVariableTensors ()

Avançado: restaura todos os tensores variáveis ​​para o valor padrão.

Se um tensor variável não tiver um buffer associado, ele será zerado.

AVISO: esta é uma API experimental e está sujeita a alterações.

public void resizeInput (int idx, int [] dims, boolean estrito)

Redimensiona a entrada idx-th do modelo nativo para os escurecimentos fornecidos.

Quando `estrito` é verdadeiro, apenas dimensões desconhecidas podem ser redimensionadas. Dimensões desconhecidas são indicadas como `-1` na matriz retornada por` Tensor.shapeSignature () `.

Lança
Exceção de argumento ilegal se idx é negtive ou não é menor que o número de entradas 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 `struct` é True.

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

Redimensiona a entrada idx-th do modelo nativo para os escurecimentos fornecidos.

Lança
Exceção de argumento ilegal se idx é negtive ou não é menor que o número de entradas modelo; ou se ocorrer um erro ao redimensionar a entrada idx-th.

public void run (entrada de objeto, saída de objeto)

Executa a inferência do modelo se o modelo aceita apenas uma entrada e fornece apenas uma saída.

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

  • ByteBuffer - compatível com qualquer tipo de Tensor primitivo subjacente.
  • FloatBuffer - compatível com tensores flutuantes.
  • IntBuffer - compatível com tensores int32.
  • LongBuffer - compatível com tensores int64.
Observe que os tipos booleanos são suportados apenas como matrizes, não Buffer s ou como entradas escalares.

Parâmetros
entrada um array ou array multidimensional, ou um Buffer de tipos primitivos incluindo int, float, long e byte. Buffer é a maneira preferida de passar grandes dados de entrada para tipos primitivos, enquanto os tipos de string requerem o uso do caminho de entrada do array (multidimensional). Quando um Buffer é usado, seu conteúdo deve permanecer inalterado até que a inferência do modelo seja feita, e o chamador deve garantir que o Buffer esteja na posição de leitura apropriada. Um valor null é permitido apenas se o chamador estiver usando um Delegate que permite a interoperabilidade de manipulação de buffer e esse buffer foi vinculado ao Tensor entrada.
resultado 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 chamador deve garantir que ele esteja definido na posição de gravação apropriada. Um valor nulo é permitido apenas se o chamador estiver usando um Delegate que permite a interoperabilidade de manipulação de buffer e esse buffer foi vinculado ao Tensor saída. Consulte setAllowBufferHandleOutput(boolean) .
Lança
Exceção de argumento ilegal se a input ou output for nula ou vazia, ou se ocorrer um erro ao executar a inferência.
Exceção de argumento ilegal (EXPERIMENTAL, sujeito a alteração) se a inferência for interrompida por setCancelled(true) .

public void runForMultipleInputsOutputs (entradas Object [], saídas Map <Integer, Object>)

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

Aviso: A API é mais eficiente se Buffer s (de preferência direto, mas não obrigatório) são usados ​​como os tipos de dados de entrada / saída. Considere usar o Buffer para alimentar e buscar dados primitivos para um melhor desempenho. Os seguintes tipos de Buffer concretos são suportados:

  • ByteBuffer - compatível com qualquer tipo de Tensor primitivo subjacente.
  • FloatBuffer - compatível com tensores flutuantes.
  • IntBuffer - compatível com tensores int32.
  • LongBuffer - compatível com tensores int64.
Observe que os tipos booleanos são suportados apenas como matrizes, não Buffer s ou como entradas escalares.

Observação: valores null para elementos individuais de inputs e outputs são permitidos apenas se o chamador estiver usando um Delegate que permite a interoperabilidade de manipulação de buffer e esse buffer foi vinculado ao (s) Tensor (es) de entrada ou saída correspondente.

Parâmetros
entradas uma matriz de dados de entrada. As entradas devem estar na mesma ordem das entradas do modelo. Cada entrada pode ser um array ou array multidimensional, ou um Buffer de tipos primitivos incluindo int, float, long e byte. Buffer é a maneira preferida de passar grandes dados de entrada, enquanto os tipos de string requerem o uso do caminho de entrada do array (multidimensional). Quando o Buffer é usado, seu conteúdo deve permanecer inalterado até que a inferência do modelo seja feita, e o chamador deve garantir que o Buffer esteja na posição de leitura apropriada.
saídas um mapa que mapeia índices de saída para matrizes multidimensionais de dados de saída ou Buffer s de tipos primitivos, incluindo int, float, long e byte. Ele só precisa manter as entradas para as saídas a serem usadas. Quando um Buffer é usado, o chamador deve garantir que ele esteja definido na posição de gravação apropriada.
Lança
Exceção de argumento ilegal se as inputs ou outputs forem nulas ou vazias, ou se ocorrer um erro ao executar a inferência.

public void runSignature (entradas Map <String, Object>, saídas Map <String, Object>)

public void runSignature (entradas Map <String, Object>, saídas Map <String, Object>, String methodName)

Executa inferência de modelo com base em SignatureDef fornecida por meio de @code methodName.

Consulte run(Object, Object) para obter mais detalhes sobre os tipos de dados de entrada e saída permitidos.

Parâmetros
entradas Um mapa de entradas do nome de entrada na assinaturaDef para um objeto de entrada.
saídas um mapeamento de mapa do nome de saída em SignatureDef para dados de saída.
methodName O nome do método exportado que identifica o SignatureDef.
Lança
Exceção de argumento ilegal se as inputs ou outputs ou o methodName for nulo ou vazio, ou se ocorrer um erro ao executar a inferência.

AVISO: esta é uma API experimental e está sujeita a alterações.

public void setCancelled (boolean cancelado)

Avançado: interrompe a inferência no meio de uma chamada para run(Object, Object) .

Um sinalizador de cancelamento será definido como verdadeiro quando esta função for chamada. O interpretador verificará o sinalizador entre as invocações de Op e, se for true , o interpretador interromperá a execução. O intérprete permanecerá em um estado cancelado até explicitamente "não cancelado" por setCancelled(false) .

AVISO: esta é uma API experimental e está sujeita a alterações.

Parâmetros
cancelado true para cancelar a inferência da melhor maneira possível; false para retomar.
Lança
IllegalStateException se o interpretador não for inicializado com a opção cancelável, que está desativada por padrão.

public void setNumThreads (int numThreads)

Este método foi descontinuado no nível da API .
Prefira usar setNumThreads(int) diretamente para controlar multi-threading de thread. Este método será removido em uma versão futura.

Define o número de threads a serem usados ​​para ops que suportam multi-threading.