Subcategorías indirectas conocidas |
Interfaz para el intérprete de modelo de TensorFlow Lite, excepto los métodos experimentales.
Una instancia InterpreterApi
encapsula un modelo de TensorFlow Lite previamente entrenado, en el que
se ejecutan para la inferencia de modelos.
Por ejemplo, si un modelo toma solo una entrada y devuelve solo una salida:
try (InterpreterApi interpreter =
new InterpreterApi.create(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 (InterpreterApi interpreter =
new InterpreterApi.create(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 (InterpreterApi interpreter =
new InterpreterApi.create(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 tipos Buffer
, no se realiza ningún cambio de tamaño implícito. el llamador debe asegurarse de que el tamaño de los bytes Buffer
coincida con el del tensor correspondiente o de que primero
cambiar el tamaño del tensor con resizeInput(int, int[])
La forma y la información de los tensores se pueden
que se obtienen a través de la clase Tensor
, disponible a través de getInputTensor(int)
y getOutputTensor(int)
.
ADVERTENCIA: Las instancias InterpreterApi
no son seguras para los subprocesos.
ADVERTENCIA: Una instancia InterpreterApi
posee recursos que deben ser
se libera de forma explícita 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 | InterpreterApi.Options | Una clase de opciones para controlar el comportamiento del intérprete del entorno de ejecución. |
Métodos públicos
abstracto anular |
allocateTensors()
Actualiza de forma explícita las asignaciones para todos los tensores, si es necesario.
|
abstracto anular |
close()
Libera los recursos asociados con la instancia
InterpreterApi . |
estático InterpreterApi |
create(opciones File modelFile, InterpreterApi.Options)
Construye una instancia de
InterpreterApi con el modelo y las opciones especificados. |
estático InterpreterApi |
create(ByteBuffer byteBuffer, opciones InterpreterApi.Options)
Construye una instancia de
InterpreterApi con el modelo y las opciones especificados. |