Interpreter

clase final pública Intérprete

Clase de controlador para controlar el modelo de inferencia con TensorFlow Lite.

Nota: Si no necesitas acceso a ninguno de los controles de las funciones de API que se mencionan a continuación, es preferible que utilices InterpreterApi e InterpreterFactory en lugar de usar Interpreter directamente.

Un Interpreter encapsula un modelo de TensorFlow Lite previamente entrenado, en el que las operaciones se ejecutan para la inferencia de modelos.

Por ejemplo, si un modelo toma solo una entrada y devuelve solo una salida:

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

Si un modelo toma varias entradas o salidas:

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 (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(inputs, map_of_indices_to_outputs);
 }
 

Si un modelo toma o produce tensores de cadenas, sucede lo siguiente:

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

Ten en cuenta que hay una distinción entre forma [] y forma[1]. Para tensor de string escalar resultados:

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

Los pedidos de entradas y salidas se determinan cuando se convierte el modelo de TensorFlow a TensorFlowLite con Toco, al igual que las formas predeterminadas de las entradas.

Cuando las entradas se proporcionan como arrays (multidimensionales), los tensores de entrada correspondientes de forma implícita según la forma del array. Cuando las entradas se proporcionan como Buffer tipos, no se realiza ningún cambio de tamaño implícito; el llamador debe asegurarse de que el tamaño de Buffer bytes coincida con el del tensor correspondiente o que primero cambien el tamaño del tensor con resizeInput(int, int[]). La información de la forma y el tipo de tensor se puede obtener a través de la clase Tensor, disponible a través de getInputTensor(int) y getOutputTensor(int).

ADVERTENCIA: Las instancias Interpreter no son seguras para los subprocesos. Un Interpreter es propietario de recursos que deben liberarse explícitamente invocando close().

La biblioteca de TFLite se compiló en función de la API de NDK 19. Es posible que funcione con niveles de API inferiores a 19, pero no está garantizada.

Categorías anidadas

clase Interpreter.Options Una clase de opciones para controlar el comportamiento del intérprete del entorno de ejecución.

Constructores públicos

Intérprete(File modelFile)
Inicializa un Interpreter.
Interpreter(File modelFile, Interpreter.Options opciones)
Inicializa un Interpreter y especifica las opciones para personalizar el comportamiento del intérprete.
Intérprete(ByteBuffer byteBuffer)
Inicializa un Interpreter con un ByteBuffer de un archivo de modelo.
Interpreter(ByteBuffer, byteBuffer, opciones Interpreter.Options)
Inicializa un Interpreter con un ByteBuffer de un archivo de modelo y un conjunto de Interpreter.Options personalizado.

Métodos públicos

void
allocateTensors()
Actualiza de forma explícita las asignaciones para todos los tensores, si es necesario.
void
close()
Libera los recursos asociados con la instancia InterpreterApi.
int
getInputIndex(opName de String)
Obtiene el índice de una entrada según el nombre de operación de la entrada.
Tensor
getInputTensor(int inputIndex)
Obtiene el tensor asociado con el índice de entrada proporcionado.
int
getInputTensorCount()
Obtiene la cantidad de tensores de entrada.
Tensor