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