Ayuda a proteger la Gran Barrera de Coral con TensorFlow en Kaggle Únete Challenge

Interpreter

Intérprete de clase final pública

Clase de controlador para impulsar la inferencia del modelo con TensorFlow Lite.

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

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 tiene varias entradas o salidas:

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

Si un modelo toma o produce tensores de cuerda:

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

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

Cuando las entradas se proporcionan como matrices (multidimensionales), el (los) tensor (es) de entrada correspondiente se redimensionará implícitamente de acuerdo con la forma de esa matriz. Cuando las entradas se proporcionan como tipos de Buffer , no se realiza ningún cambio de tamaño implícito; la persona que llama debe asegurarse de que el tamaño de bytes del Buffer coincida con el del tensor correspondiente o que primero resizeInput(int, int[]) el tamaño del tensor a través de resizeInput(int, int[]) . La información sobre 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 de un Interpreter no son seguras para subprocesos. Un Interpreter posee recursos que deben liberarse explícitamente invocando close()

La biblioteca TFLite se basa en NDK API 19. Puede funcionar para niveles de API de Android por debajo de 19, pero no está garantizado.

Nota: esta clase no es segura para subprocesos.

Clases anidadas

clase Intérprete.Opciones Una clase de opciones para controlar el comportamiento del intérprete en tiempo de ejecución.

Constructores públicos

Intérprete (modelo de archivoFile)
Inicializa un Interpreter
Intérprete (archivo modelFile, int numThreads)
Este constructor quedó obsoleto en el nivel de API. Prefiere usar el constructor Interpreter(File, Options) . Este método se eliminará en una versión futura.
Intérprete (archivo modelFile, Interpreter.Options opciones)
Inicializa un Interpreter y especifica el número de subprocesos utilizados para la inferencia.
Intérprete (ByteBuffer byteBuffer)
Inicializa un Interpreter con un ByteBuffer de un archivo de modelo.
Intérprete (ByteBuffer byteBuffer, int numThreads)
Este constructor quedó obsoleto en el nivel de API. Prefiere usar el constructor Interpreter(ByteBuffer, Options) . Este método se eliminará en una versión futura.
Intérprete (MappedByteBuffer mappedByteBuffer)
Este constructor quedó obsoleto en el nivel de API. Prefiere usar el constructor Interpreter(ByteBuffer, Options) . Este método se eliminará en una versión futura.
Intérprete (ByteBuffer byteBuffer, Interpreter.Options opciones)
Inicializa un Interpreter con un ByteBuffer de un archivo de modelo y un conjunto de opciones de Interpreter.Options personalizadas.

Métodos públicos

vacío
allocateTensors ()
Actualiza explícitamente las asignaciones para todos los tensores, si es necesario.
vacío
cerrar ()
Liberar recursos asociados con el Interpreter .
En t
getInputIndex (String opName)
Obtiene el índice de una entrada dado el nombre de operación de la entrada.
Tensor
getInputTensor (int inputIndex)
Obtiene el tensor asociado con el índice de entrada proporcionado.
En t
getInputTensorCount ()
Obtiene el número de tensores de entrada.
Tensor
getInputTensorFromSignature (String inputName, String methodName)
Obtiene el tensor asociado con el nombre de entrada proporcionado y el nombre del método de firma.
Largo
getLastNativeInferenceDurationNanoseconds ()
Devuelve el tiempo de inferencia nativa.
En t
getOutputIndex (String opName)
Obtiene el índice de una salida dado el nombre de operación de la salida.
Tensor
getOutputTensor (int outputIndex)
Obtiene el tensor asociado con el índice de salida proporcionado.
En t
getOutputTensorCount ()
Obtiene el número de tensores de salida.
Tensor
getOutputTensorFromSignature (String outputName, String methodName)
Obtiene el tensor asociado con el nombre de salida proporcionado en el método de firma específico.
Cuerda[]
getSignatureDefNames ()
Obtiene la lista de nombres de métodos exportados SignatureDef disponibles en el modelo.
Cuerda[]
getSignatureInputs (String methodName)
Obtiene la lista de entradas SignatureDefs para el método methodName

ADVERTENCIA: Esta es una API experimental y está sujeta a cambios.

Cuerda[]
getSignatureOutputs (String methodName)
Obtiene la lista de salidas SignatureDefs para el método methodName

ADVERTENCIA: Esta es una API experimental y está sujeta a cambios.

vacío
modificarGraphWithDelegate ( delegado delegado)
Este método quedó obsoleto en el nivel de API. Prefiere usar addDelegate(Delegate) para proporcionar delegados en el momento de la creación. Este método se eliminará en una versión futura.
vacío
resetVariableTensors ()
Avanzado: restablece todos los tensores variables al valor predeterminado.
vacío
resizeInput (int idx, int [] atenúa, booleano estricto)
Cambia el tamaño de la entrada idx-ésima del modelo nativo a las atenuaciones dadas.
vacío
resizeInput (int idx, int [] atenúa)
Cambia el tamaño de la entrada idx-ésima del modelo nativo a las atenuaciones dadas.
vacío
ejecutar (entrada de objeto, salida de objeto)
Ejecuta la inferencia del modelo si el modelo solo toma una entrada y proporciona solo una salida.
vacío
runForMultipleInputsOutputs (Object [] entradas, Map <Integer, Object> salidas)
Ejecuta la inferencia del modelo si el modelo toma varias entradas o devuelve varias salidas.
vacío
runSignature (entradas Map <String, Object>, salidas Map <String, Object>)
vacío
runSignature (Map <String, Object> entradas, Map <String, Object> salidas, String methodName)
Ejecuta la inferencia del modelo en función de SignatureDef proporcionada a través de @code methodName.
vacío
setCancelled (booleano cancelado)
Avanzado: interrumpe la inferencia en medio de una llamada para run(Object, Object) .
vacío
setNumThreads (int numThreads)
Este método quedó obsoleto en el nivel de API. Prefiera usar setNumThreads(int) directamente para controlar subprocesos múltiples. Este método se eliminará en una versión futura.

Métodos heredados

Constructores públicos

intérprete público (archivo de modelo de archivo)

Inicializa un Interpreter

Lanza
Argumento de excepción ilegal si modelFile no codifica un modelo válido de TensorFlow Lite.

intérprete público (archivo modelFile, int numThreads)

Este constructor quedó obsoleto en el nivel de API .
Prefiere usar el constructor Interpreter(File, Options) . Este método se eliminará en una versión futura.

Inicializa un Interpreter y especifica el número de subprocesos utilizados para la inferencia.

intérprete público (archivo modelFile, intérprete.Opciones opciones)

Inicializa un Interpreter y especifica el número de subprocesos utilizados para la inferencia.

Lanza
Argumento de excepción ilegal si modelFile no codifica un modelo válido de TensorFlow Lite.

Intérprete público (ByteBuffer byteBuffer)

Inicializa un Interpreter con un ByteBuffer de un archivo de modelo.

El ByteBuffer no debe modificarse después de la construcción de un Interpreter . El ByteBuffer puede ser un MappedByteBuffer que MappedByteBuffer memoria un archivo de modelo, o un ByteBuffer directo de nativeOrder () que contiene el contenido de bytes de un modelo.

Lanza
Argumento de excepción ilegal si byteBuffer no es un MappedByteBuffer ni un ERROR(/Bytebuffer) directo ERROR(/Bytebuffer) de nativeOrder.

Intérprete público (ByteBuffer byteBuffer, int numThreads)

Este constructor quedó obsoleto en el nivel de API .
Prefiere usar el constructor Interpreter(ByteBuffer, Options) . Este método se eliminará en una versión futura.

Inicializa un Interpreter con un ByteBuffer de un archivo de modelo y especifica el número de subprocesos utilizados para la inferencia.

El ByteBuffer no debe modificarse después de la construcción de un Interpreter . El ByteBuffer puede ser un MappedByteBuffer que MappedByteBuffer memoria un archivo de modelo, o un ByteBuffer directo de nativeOrder () que contiene el contenido de bytes de un modelo.

Intérprete público (MappedByteBuffer mappedByteBuffer)

Este constructor quedó obsoleto en el nivel de API .
Prefiere usar el constructor Interpreter(ByteBuffer, Options) . Este método se eliminará en una versión futura.

Inicializa un Interpreter con MappedByteBuffer en el archivo de modelo.

El MappedByteBuffer debe permanecer sin cambios después de la construcción de un Interpreter .

intérprete público (ByteBuffer byteBuffer, opciones Interpreter.Options )

Inicializa un Interpreter con un ByteBuffer de un archivo de modelo y un conjunto de opciones de Interpreter.Options personalizadas.

El ByteBuffer no debe modificarse después de la construcción de un Interpreter . El ByteBuffer puede ser un MappedByteBuffer que MappedByteBuffer memoria un archivo de modelo, o un ByteBuffer directo de nativeOrder () que contiene el contenido de bytes de un modelo.

Lanza
Argumento de excepción ilegal si byteBuffer no es un MappedByteBuffer ni un ERROR(/Bytebuffer) directo ERROR(/Bytebuffer) de nativeOrder.

Métodos públicos

public void allocateTensors ()

Actualiza explícitamente las asignaciones para todos los tensores, si es necesario.

Esto propagará las formas y las asignaciones de memoria para todos los tensores dependientes utilizando las formas del tensor de entrada como se indica.

Nota: Esta llamada es * puramente opcional *. La asignación de tensores ocurrirá automáticamente durante la ejecución si se ha cambiado el tamaño de los tensores de entrada. Esta llamada es más útil para determinar las formas de los tensores de salida antes de ejecutar el gráfico, por ejemplo,

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

Lanza
IllegalStateException si los tensores del gráfico no se pudieron asignar correctamente.

cierre del vacío público ()

Liberar recursos asociados con el Interpreter .

public int getInputIndex (String opName)

Obtiene el índice de una entrada dado el nombre de operación de la entrada.

Lanza
Argumento de excepción ilegal si opName no coincide con ninguna entrada en el modelo utilizado para inicializar el Interpreter .

public Tensor getInputTensor (int inputIndex)

Obtiene el tensor asociado con el índice de entrada proporcionado.

Lanza
Argumento de excepción ilegal si inputIndex es negativo o no es menor que el número de entradas del modelo.

public int getInputTensorCount ()

Obtiene el número de tensores de entrada.

public Tensor getInputTensorFromSignature (String inputName, String methodName)

Obtiene el tensor asociado con el nombre de entrada proporcionado y el nombre del método de firma.

Parámetros
nombre de entrada Ingrese el nombre en la firma.
nombreMétodo El nombre del método exportado que identifica SignatureDef puede ser nulo si el modelo tiene una firma.
Lanza
Argumento de excepción ilegal si inputName o methodName es nulo o está vacío, o si se proporciona un nombre no válido.

ADVERTENCIA: Esta es una API experimental y está sujeta a cambios.

public Long getLastNativeInferenceDurationNanoseconds ()

Devuelve el tiempo de inferencia nativa.

Lanza
Argumento de excepción ilegal si el modelo no es inicializado por el Interpreter .

public int getOutputIndex (String opName)

Obtiene el índice de una salida dado el nombre de operación de la salida.

Lanza
Argumento de excepción ilegal si opName no coincide con ninguna salida del modelo utilizado para inicializar el Interpreter .

public Tensor getOutputTensor (int outputIndex)

Obtiene el tensor asociado con el índice de salida proporcionado.

Nota: Es posible que los detalles del tensor de salida (p. Ej., La forma) no se completen por completo hasta que se ejecute la inferencia. Si necesita detalles actualizados * antes * de ejecutar la inferencia (por ejemplo, después de cambiar el tamaño de un tensor de entrada, que puede invalidar las formas del tensor de salida), use allocateTensors() para activar explícitamente la asignación y la propagación de formas. Tenga en cuenta que, para gráficos con formas de salida que dependen de los * valores * de entrada *, es posible que la forma de salida no se determine por completo hasta que se ejecute la inferencia.

Lanza
Argumento de excepción ilegal si outputIndex es negativo o no es menor que el número de salidas del modelo.

public int getOutputTensorCount ()

Obtiene el número de tensores de salida.

public Tensor getOutputTensorFromSignature (String outputName, String methodName)

Obtiene el tensor asociado con el nombre de salida proporcionado en el método de firma específico.

Nota: Es posible que los detalles del tensor de salida (p. Ej., La forma) no se completen por completo hasta que se ejecute la inferencia. Si necesita detalles actualizados * antes * de ejecutar la inferencia (por ejemplo, después de cambiar el tamaño de un tensor de entrada, que puede invalidar las formas del tensor de salida), use allocateTensors() para activar explícitamente la asignación y la propagación de formas. Tenga en cuenta que, para gráficos con formas de salida que dependen de los * valores * de entrada *, es posible que la forma de salida no se determine por completo hasta que se ejecute la inferencia.

Parámetros
outputName Nombre de salida en la firma.
nombreMétodo El nombre del método exportado que identifica SignatureDef puede ser nulo si el modelo tiene una firma.
Lanza
Argumento de excepción ilegal si outputName o methodName es nulo o está vacío, o si se proporciona un nombre no válido.

ADVERTENCIA: Esta es una API experimental y está sujeta a cambios.

cadena pública [] getSignatureDefNames ()

Obtiene la lista de nombres de métodos exportados SignatureDef disponibles en el modelo.

ADVERTENCIA: Esta es una API experimental y está sujeta a cambios.

public String [] getSignatureInputs (String methodName)

Obtiene la lista de entradas SignatureDefs para el método methodName

ADVERTENCIA: Esta es una API experimental y está sujeta a cambios.

public String [] getSignatureOutputs (String methodName)

Obtiene la lista de salidas SignatureDefs para el método methodName

ADVERTENCIA: Esta es una API experimental y está sujeta a cambios.

public void modifiedGraphWithDelegate ( Delegado delegado)

Este método quedó obsoleto en el nivel de API .
Prefiere usar addDelegate(Delegate) para proporcionar delegados en el momento de la creación. Este método se eliminará en una versión futura.

Avanzado: modifica el gráfico con el Delegate proporcionado.

Lanza
Argumento de excepción ilegal si se produce un error al modificar el gráfico con delegate .

public void resetVariableTensors ()

Avanzado: restablece todos los tensores variables al valor predeterminado.

Si un tensor de variable no tiene un búfer asociado, se restablecerá a cero.

ADVERTENCIA: Esta es una API experimental y está sujeta a cambios.

public void resizeInput (int idx, int [] atenúa, booleano estricto)

Cambia el tamaño de la entrada idx-ésima del modelo nativo a las atenuaciones dadas.

Cuando "estricto" es Verdadero, solo las dimensiones desconocidas pueden cambiar de tamaño. Las dimensiones desconocidas se indican como "-1" en la matriz devuelta por "Tensor.shapeSignature ()".

Lanza
Argumento de excepción ilegal si idx es negativo o no es menor que el número de entradas del modelo; o si se produce un error al cambiar el tamaño de la entrada idx-th. Además, el error se produce al intentar cambiar el tamaño de un tensor con dimensiones fijas cuando `struct` es True.

resizeInput público void (int idx, int [] atenúa)

Cambia el tamaño de la entrada idx-ésima del modelo nativo a las atenuaciones dadas.

Lanza
Argumento de excepción ilegal si idx es negativo o no es menor que el número de entradas del modelo; o si se produce un error al cambiar el tamaño de la entrada idx-th.

ejecución de vacío público (entrada de objeto, salida de objeto)

Ejecuta la inferencia del modelo si el modelo solo toma una entrada y proporciona solo una salida.

Advertencia: la API es más eficiente si se utiliza un Buffer (preferiblemente directo, pero no obligatorio) como tipo de datos de entrada / salida. Considere usar Buffer para alimentar y obtener datos primitivos para un mejor rendimiento. Se admiten los siguientes tipos de Buffer hormigón:

  • ByteBuffer : compatible con cualquier tipo de tensor primitivo subyacente.
  • FloatBuffer : compatible con los tensores de flotación.
  • IntBuffer : compatible con tensores int32.
  • LongBuffer : compatible con tensores int64.
Tenga en cuenta que los tipos booleanos solo se admiten como matrices, no como Buffer o como entradas escalares.

Parámetros
aporte una matriz o matriz multidimensional, o un Buffer de tipos primitivos que incluyen int, float, long y byte. Buffer es la forma preferida de pasar datos de entrada grandes para tipos primitivos, mientras que los tipos de cadena requieren el uso de la ruta de entrada de matriz (multidimensional). Cuando se utiliza un Buffer , su contenido debe permanecer sin cambios hasta que se realiza la inferencia del modelo, y la persona que llama debe asegurarse de que el Buffer esté en la posición de lectura adecuada. Se permite un valor null solo si la persona que llama está usando un Delegate que permite la interoperabilidad del manejo del búfer, y dicho búfer se ha vinculado al Tensor entrada.
producción una matriz multidimensional de datos de salida o un Buffer de tipos primitivos que incluyen int, float, long y byte. Cuando se utiliza un Buffer , la persona que llama debe asegurarse de que esté configurada en la posición de escritura adecuada. Se permite un valor nulo solo si la persona que llama está usando un Delegate que permite la interoperabilidad del manejo del búfer, y dicho búfer se ha vinculado al Tensor salida. Consulte setAllowBufferHandleOutput(boolean) .
Lanza
Argumento de excepción ilegal si la input o la output es nula o está vacía, o si se produce un error al ejecutar la inferencia.
Argumento de excepción ilegal (EXPERIMENTAL, sujeto a cambios) si la inferencia es interrumpida por setCancelled(true) .

public void runForMultipleInputsOutputs (Object [] entradas, Map <Integer, Object> salidas)

Ejecuta la inferencia del modelo si el modelo toma varias entradas o devuelve varias salidas.

Advertencia: La API es más eficiente si se utilizan Buffer s (preferiblemente directos, pero no obligatorios) como tipos de datos de entrada / salida. Considere usar Buffer para alimentar y obtener datos primitivos para un mejor rendimiento. Se admiten los siguientes tipos de Buffer hormigón:

  • ByteBuffer : compatible con cualquier tipo de tensor primitivo subyacente.
  • FloatBuffer : compatible con los tensores de flotación.
  • IntBuffer : compatible con tensores int32.
  • LongBuffer : compatible con tensores int64.
Tenga en cuenta que los tipos booleanos solo se admiten como matrices, no como Buffer o como entradas escalares.

Nota: se permiten valores null para elementos invididuales de inputs y outputs solo si la persona que llama está usando un Delegate que permite la interoperabilidad del manejo del búfer, y dicho búfer se ha vinculado a los correspondientes Tensor entrada o salida.

Parámetros
entradas una matriz de datos de entrada. Las entradas deben estar en el mismo orden que las entradas del modelo. Cada entrada puede ser una matriz o matriz multidimensional, o un Buffer de tipos primitivos que incluyen int, float, long y byte. Buffer es la forma preferida de pasar datos de entrada grandes, mientras que los tipos de cadena requieren el uso de la ruta de entrada de matriz (multidimensional). Cuando se utiliza el Buffer , su contenido debe permanecer sin cambios hasta que se realiza la inferencia del modelo, y la persona que llama debe asegurarse de que el Buffer esté en la posición de lectura adecuada.
salidas un mapa que asigna índices de salida a matrices multidimensionales de datos de salida o Buffer de tipos primitivos, incluidos int, float, long y byte. Solo necesita mantener las entradas para que se utilicen las salidas. Cuando se utiliza un Buffer , la persona que llama debe asegurarse de que esté configurada en la posición de escritura adecuada.
Lanza
Argumento de excepción ilegal si las inputs o outputs son nulas o vacías, o si se produce un error al ejecutar la inferencia.

public void runSignature (Map <String, Object> entradas, Map <String, Object> salidas)

public void runSignature (Map <String, Object> entradas, Map <String, Object> salidas, String methodName)

Ejecuta la inferencia del modelo en función de SignatureDef proporcionada a través de @code methodName.

Consulte run(Object, Object) para obtener más detalles sobre los tipos de datos de entrada y salida permitidos.

Parámetros
entradas Un mapa de entradas desde el nombre de entrada en signatureDef hasta un objeto de entrada.
salidas una asignación de mapa desde el nombre de salida en SignatureDef a los datos de salida.
nombreMétodo El nombre del método exportado que identifica SignatureDef.
Lanza
Argumento de excepción ilegal si inputs o outputs o methodName es nulo o está vacío, o si se produce un error al ejecutar la inferencia.

ADVERTENCIA: Esta es una API experimental y está sujeta a cambios.

public void setCancelled (booleano cancelado)

Avanzado: interrumpe la inferencia en medio de una llamada para run(Object, Object) .

Un indicador de cancelación se establecerá en verdadero cuando se llame a esta función. El intérprete verificará la bandera entre las invocaciones de Op y, si es true , el intérprete detendrá la ejecución. El intérprete permanecerá en un estado cancelado hasta que setCancelled(false) "no cancele" explícitamente.

ADVERTENCIA: Esta es una API experimental y está sujeta a cambios.

Parámetros
cancelado true para cancelar la inferencia de la mejor manera posible; false para reanudar.
Lanza
IllegalStateException si el intérprete no se inicializa con la opción cancelable, que está desactivada por defecto.

public void setNumThreads (int numThreads)

Este método quedó obsoleto en el nivel de API .
Prefiera usar setNumThreads(int) directamente para controlar subprocesos múltiples. Este método se eliminará en una versión futura.

Establece el número de subprocesos que se utilizarán para operaciones que admitan subprocesos múltiples.