Cette page a été traduite par l'API Cloud Translation.
Switch to English

Interprète

interprète de classe finale publique

Classe de pilote pour conduire l'inférence de modèle avec TensorFlow Lite.

Un Interpreter encapsule un modèle TensorFlow Lite pré-entraîné, dans lequel des opérations sont exécutées pour l'inférence de modèle.

Par exemple, si un modèle ne prend qu'une seule entrée et ne renvoie qu'une seule sortie:

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

Si un modèle accepte plusieurs entrées ou sorties:

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 modèle prend ou produit des tenseurs de chaîne:

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

Les ordres des entrées et des sorties sont déterminés lors de la conversion du modèle TensorFlow en modèle TensorFlowLite avec Toco, tout comme les formes par défaut des entrées.

Lorsque les entrées sont fournies sous forme de tableaux (multidimensionnels), le ou les tenseur (s) d'entrée correspondants seront implicitement redimensionnés en fonction de la forme de ce tableau. Lorsque les entrées sont fournies en tant que types ERROR(/Buffer) , aucun redimensionnement implicite n'est effectué; l'appelant doit s'assurer que la taille d'octet ERROR(/Buffer) correspond soit à celle du tenseur correspondant, soit qu'il redimensionne d'abord le tenseur via ERROR(/#resizeInput()) . Les informations sur la forme et le type du getInputTensor(int) peuvent être obtenues via la classe Tensor , disponible via getInputTensor(int) et getOutputTensor(int) .

AVERTISSEMENT: les instances d'un Interpreter ne sont pas thread-safe. Un Interpreter possède des ressources qui doivent être explicitement libérées en appelant close()

La bibliothèque TFLite est basée sur l'API NDK 19. Elle peut fonctionner pour les niveaux d'API Android inférieurs à 19, mais n'est pas garantie.

Classes imbriquées

classe Interprète.Options Une classe d'options pour contrôler le comportement de l'interpréteur d'exécution.

Constructeurs publics

Interpréteur (fichier modelFile)
Initialise un Interpreter
Interpréteur (fichier modelFile, int numThreads)
Ce constructeur était obsolète au niveau de l'API. Préférez utiliser le constructeur Interpreter(File, Options) . Cette méthode sera supprimée dans une prochaine version.
Interpréteur (File modelFile, Options Interpreter.Options )
Initialise un Interpreter et spécifie le nombre de threads utilisés pour l'inférence.
Interpréteur (ByteBuffer byteBuffer)
Initialise un Interpreter avec un ByteBuffer d'un fichier modèle.
Interpréteur (ByteBuffer byteBuffer, int numThreads)
Ce constructeur était obsolète au niveau de l'API. Préférez utiliser le constructeur Interpreter(ByteBuffer, Options) . Cette méthode sera supprimée dans une prochaine version.
Interpréteur (MappedByteBuffer mappedByteBuffer)
Ce constructeur était obsolète au niveau de l'API. Préférez utiliser le constructeur Interpreter(ByteBuffer, Options) . Cette méthode sera supprimée dans une prochaine version.
Interpréteur (ByteBuffer byteBuffer, options Interpreter.Options )
Initialise un Interpreter avec un ByteBuffer d'un fichier modèle et un ensemble d' ByteBuffer personnalisées ERROR(/#Options) .

Méthodes publiques

néant
allocateTensors ()
Met à jour de manière expresse les allocations pour tous les tenseurs, si nécessaire.
néant
fermer ()
Libérez les ressources associées à l' Interpreter .
int
getInputIndex (String opName)
Obtient l'index d'une entrée en fonction du nom d'opération de l'entrée.
Tenseur
getInputTensor (int inputIndex)
Obtient le Tensor associé à l'index d'entrée fourni.
int
getInputTensorCount ()
Obtient le nombre de tenseurs d'entrée.
Longue
getLastNativeInferenceDurationNanosecondes ()
Renvoie le temps d'inférence natif.
int
getOutputIndex (String opName)
Obtient l'index d'une sortie en fonction du nom d'opération de la sortie.
Tenseur
getOutputTensor (int outputIndex)
Obtient le Tensor associé à l'index de sortie fourni.
int
getOutputTensorCount ()
Obtient le nombre de Tensors de sortie.
néant
modifyGraphWithDelegate ( délégué délégué)
Avancé: modifie le graphique avec le Delegate fourni.
néant
resetVariableTensors ()
Avancé: réinitialise tous les tenseurs variables à la valeur par défaut.
néant
resizeInput (int idx, int [] dims, booléen strict)
Redimensionne l'entrée idx-ème du modèle natif aux dims donnés.
néant
resizeInput (int idx, int [] dims)
Redimensionne l'entrée idx-ème du modèle natif aux dims donnés.
néant
run (entrée d'objet, sortie d'objet)
Exécute l'inférence de modèle si le modèle ne prend qu'une seule entrée et ne fournit qu'une seule sortie.
néant
runForMultipleInputsOutputs (entrées Object [], sorties Map <Integer, Object>)
Exécute l'inférence de modèle si le modèle prend plusieurs entrées ou renvoie plusieurs sorties.
néant
setNumThreads (int numThreads)
Cette méthode était obsolète au niveau de l'API. Préférez utiliser setNumThreads(int) directement pour contrôler le multi-threading. Cette méthode sera supprimée dans une prochaine version.
néant
setUseNNAPI (booléen useNNAPI)
Cette méthode était obsolète au niveau de l'API. Préférez utiliser setUseNNAPI(boolean) directement pour activer l'API NN. Cette méthode sera supprimée dans une prochaine version.

Méthodes héritées

Constructeurs publics

Interprète public (fichier modelFile)

Initialise un Interpreter

Jette
Exception d'argument illégal si modelFile n'encode pas un modèle TensorFlow Lite valide.

Interprète public (fichier modelFile, int numThreads)

Ce constructeur était obsolète au niveau de l'API .
Préférez utiliser le constructeur Interpreter(File, Options) . Cette méthode sera supprimée dans une prochaine version.

Initialise un Interpreter et spécifie le nombre de threads utilisés pour l'inférence.

Interpréteur public (Options de fichier modelFile, Interpreter.Options )

Initialise un Interpreter et spécifie le nombre de threads utilisés pour l'inférence.

Jette
Exception d'argument illégal si modelFile n'encode pas un modèle TensorFlow Lite valide.

interpréteur public (ByteBuffer byteBuffer)

Initialise un Interpreter avec un ByteBuffer d'un fichier modèle.

Le ByteBuffer ne doit pas être modifié après la construction d'un Interpreter . Le ByteBuffer peut être soit un MappedByteBuffer qui MappedByteBuffer mémoire un fichier modèle, soit un ByteBuffer direct de nativeOrder () qui contient le contenu en octets d'un modèle.

Jette
Exception d'argument illégal si byteBuffer n'est pas un MappedByteBuffer ni une ERROR(/Bytebuffer) directe ERROR(/Bytebuffer) de nativeOrder.

Interprète public (ByteBuffer byteBuffer, int numThreads)

Ce constructeur était obsolète au niveau de l'API .
Préférez utiliser le constructeur Interpreter(ByteBuffer, Options) . Cette méthode sera supprimée dans une prochaine version.

Initialise un Interpreter avec un ByteBuffer d'un fichier modèle et spécifie le nombre de threads utilisés pour l'inférence.

Le ByteBuffer ne doit pas être modifié après la construction d'un Interpreter . Le ByteBuffer peut être soit un MappedByteBuffer qui MappedByteBuffer mémoire un fichier modèle, soit un ByteBuffer direct de nativeOrder () qui contient le contenu en octets d'un modèle.

Interpréteur public (MappedByteBuffer mappedByteBuffer)

Ce constructeur était obsolète au niveau de l'API .
Préférez utiliser le constructeur Interpreter(ByteBuffer, Options) . Cette méthode sera supprimée dans une prochaine version.

Initialise un Interpreter avec un MappedByteBuffer dans le fichier modèle.

Le MappedByteBuffer doit rester inchangé après la construction d'un Interpreter .

Interpréteur public (ByteBuffer byteBuffer, options Interpreter.Options )

Initialise un Interpreter avec un ByteBuffer d'un fichier modèle et un ensemble d' ByteBuffer personnalisées ERROR(/#Options) .

Le ByteBuffer ne doit pas être modifié après la construction d'un Interpreter . Le ByteBuffer peut être soit un MappedByteBuffer qui MappedByteBuffer mémoire un fichier de modèle, soit un ByteBuffer direct de nativeOrder () qui contient le contenu en octets d'un modèle.

Jette
Exception d'argument illégal si byteBuffer n'est pas un MappedByteBuffer ni une ERROR(/Bytebuffer) directe ERROR(/Bytebuffer) de nativeOrder.

Méthodes publiques

public void allocateTensors ()

Met à jour de manière expresse les allocations pour tous les tenseurs, si nécessaire.

Cela propagera les formes et les allocations de mémoire pour tous les tenseurs dépendants en utilisant la ou les formes de tenseur d'entrée telles que données.

Remarque: cet appel est * purement facultatif *. L'allocation des tenseurs se produira automatiquement pendant l'exécution si des tenseurs d'entrée ont été redimensionnés. Cet appel est le plus utile pour déterminer les formes de tous les tenseurs de sortie avant d'exécuter le graphe, par exemple

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

Jette
IllegalStateException si les tenseurs du graphe n'ont pas pu être alloués avec succès.

public void close ()

Libérez les ressources associées à l' Interpreter .

public int getInputIndex (String opName)

Obtient l'index d'une entrée en fonction du nom d'opération de l'entrée.

Jette
Exception d'argument illégal si opName ne correspond à aucune entrée du modèle utilisé pour initialiser l' Interpreter .

public Tensor getInputTensor (int inputIndex)

Obtient le Tensor associé à l'index d'entrée fourni.

Jette
Exception d'argument illégal si inputIndex est négatif ou n'est pas inférieur au nombre d'entrées du modèle.

public int getInputTensorCount ()

Obtient le nombre de tenseurs d'entrée.

public Long getLastNativeInferenceDurationNanoseconds ()

Renvoie le temps d'inférence natif.

Jette
Exception d'argument illégal si le modèle n'est pas initialisé par l' Interpreter .

public int getOutputIndex (String opName)

Obtient l'index d'une sortie en fonction du nom d'opération de la sortie.

Jette
Exception d'argument illégal si opName ne correspond à aucune sortie du modèle utilisé pour initialiser l' Interpreter .

public Tensor getOutputTensor (int outputIndex)

Obtient le Tensor associé à l'index de sortie fourni.

Remarque: les détails du tenseur de sortie (par exemple, la forme) peuvent ne pas être entièrement renseignés tant que l'inférence n'est pas exécutée. Si vous avez besoin de détails mis à jour * avant * d'exécuter l'inférence (par exemple, après le redimensionnement d'un tenseur d'entrée, ce qui peut invalider les formes de tenseur de sortie), utilisez allocateTensors() pour déclencher explicitement l'allocation et la propagation de forme. Notez que, pour les graphiques avec des formes de sortie qui dépendent des * valeurs * d'entrée, la forme de sortie peut ne pas être entièrement déterminée avant l'exécution de l'inférence.

Jette
Exception d'argument illégal si outputIndex est négatif ou n'est pas inférieur au nombre de sorties du modèle.

public int getOutputTensorCount ()

Obtient le nombre de Tensors de sortie.

public void modifyGraphWithDelegate ( délégué délégué)

Avancé: modifie le graphique avec le Delegate fourni.

Remarque: Le chemin typique pour fournir des délégués est via addDelegate(Delegate) , au moment de la création. Ce chemin ne doit être utilisé que lorsqu'un délégué peut nécessiter une interaction coordonnée entre la création d'Interpeter et l'application déléguée.

AVERTISSEMENT: Ceci est une API expérimentale et sujet à changement.

Jette
Exception d'argument illégal si une erreur se produit lors de la modification du graphique avec un delegate .

public void resetVariableTensors ()

Avancé: réinitialise tous les tenseurs variables à la valeur par défaut.

Si un tenseur variable n'a pas de tampon associé, il sera remis à zéro.

AVERTISSEMENT: Ceci est une API expérimentale et sujet à changement.

public void resizeInput (int idx, int [] dims, booléen strict)

Redimensionne l'entrée idx-ème du modèle natif aux dims donnés.

Lorsque `strict` vaut True, seules les dimensions inconnues peuvent être redimensionnées. Les dimensions inconnues sont indiquées par «-1» dans le tableau renvoyé par «Tensor.shapeSignature ()».

Jette
Exception d'argument illégal si idx est négatif ou n'est pas inférieur au nombre d'entrées du modèle; ou si une erreur se produit lors du redimensionnement de l'entrée idx-th. De plus, l'erreur se produit lors de la tentative de redimensionnement d'un tenseur avec des dimensions fixes lorsque `struct` a la valeur True.

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

Redimensionne l'entrée idx-ème du modèle natif aux dims donnés.

Jette
Exception d'argument illégal si idx est négatif ou n'est pas inférieur au nombre d'entrées du modèle; ou si une erreur se produit lors du redimensionnement de l'entrée idx-th.

public void run (entrée d'objet, sortie d'objet)

Exécute l'inférence de modèle si le modèle ne prend qu'une seule entrée et ne fournit qu'une seule sortie.

Avertissement: L'API est plus efficace si une ERROR(/Buffer) (de préférence directe, mais pas obligatoire) est utilisée comme type de données d'entrée / sortie. Veuillez envisager d'utiliser ERROR(/Buffer) pour alimenter et récupérer des données primitives pour de meilleures performances. Les types d' ERROR(/Buffer) concrets suivants sont pris en charge:

Notez que les types booléens ne sont pris en charge que sous forme de tableaux et non d' ERROR(/Buffer) ou d'entrées scalaires.

Paramètres
contribution un tableau ou un tableau multidimensionnel, ou une ERROR(/Buffer) de types primitifs comprenant int, float, long et byte. ERROR(/Buffer) est le moyen préféré de transmettre des données d'entrée volumineuses pour les types primitifs, tandis que les types chaîne nécessitent l'utilisation du chemin d'entrée du tableau (multidimensionnel). Lorsqu'une ERROR(/Buffer) est utilisée, son contenu doit rester inchangé jusqu'à ce que l'inférence du modèle soit effectuée, et l'appelant doit s'assurer que ERROR(/Buffer) est à la position de lecture appropriée. Une valeur null n'est autorisée que si l'appelant utilise un Delegate qui autorise l'interopérabilité des poignées de tampon, et qu'un tel tampon a été lié à l'entrée Tensor .
production un tableau multidimensionnel de données de sortie, ou une ERROR(/Buffer) de types primitifs comprenant int, float, long et byte. Lorsqu'une ERROR(/Buffer) est utilisée, l'appelant doit s'assurer qu'il est défini sur la position d'écriture appropriée. Une valeur nulle n'est autorisée que si l'appelant utilise un Delegate qui autorise l'interopérabilité des poignées de tampon, et qu'un tel tampon a été lié au Tensor sortie. Voir ERROR(/Options#setAllowBufferHandleOutput()) .
Jette
Exception d'argument illégal si l' input ou la output est nulle ou vide, ou si une erreur se produit lors de l'exécution de l'inférence.

public void runForMultipleInputsOutputs (entrées Object [], sorties Map <Integer, Object>)

Exécute l'inférence de modèle si le modèle prend plusieurs entrées ou renvoie plusieurs sorties.

Avertissement: L'API est plus efficace si des ERROR(/Buffer) (de préférence directs, mais non obligatoires) sont utilisés comme types de données d'entrée / sortie. Veuillez envisager d'utiliser ERROR(/Buffer) pour alimenter et récupérer des données primitives pour de meilleures performances. Les types d' ERROR(/Buffer) concrets suivants sont pris en charge:

Notez que les types booléens ne sont pris en charge que sous forme de tableaux et non d' ERROR(/Buffer) ou d'entrées scalaires.

Remarque: null valeurs null pour les éléments individuels des inputs et des outputs sont autorisées uniquement si l'appelant utilise un Delegate qui autorise l'interopérabilité des poignées de tampon, et qu'un tel tampon a été lié au ou aux Tensor (s) d'entrée ou de sortie correspondants.

Paramètres
contributions un tableau de données d'entrée. Les entrées doivent être dans le même ordre que les entrées du modèle. Chaque entrée peut être un tableau ou un tableau multidimensionnel, ou une ERROR(/Buffer) de types primitifs comprenant int, float, long et byte. ERROR(/Buffer) est le moyen préféré pour transmettre des données d'entrée volumineuses, tandis que les types de chaîne nécessitent l'utilisation du chemin d'entrée du tableau (multidimensionnel). Lorsque ERROR(/Buffer) est utilisé, son contenu doit rester inchangé jusqu'à ce que l'inférence du modèle soit effectuée, et l'appelant doit s'assurer que ERROR(/Buffer) est à la position de lecture appropriée.
les sorties une carte mappant les indices de sortie à des tableaux multidimensionnels de données de sortie ou des ERROR(/Buffer) de types primitifs, y compris int, float, long et byte. Il n'a besoin de conserver les entrées que pour les sorties à utiliser. Lorsqu'une ERROR(/Buffer) est utilisée, l'appelant doit s'assurer qu'il est défini sur la position d'écriture appropriée.
Jette
Exception d'argument illégal si les inputs ou les outputs sont nulles ou vides, ou si une erreur se produit lors de l'exécution de l'inférence.

public void setNumThreads (int numThreads)

Cette méthode était obsolète au niveau de l'API .
Préférez utiliser setNumThreads(int) directement pour contrôler le multi-threading des threads. Cette méthode sera supprimée dans une prochaine version.

Définit le nombre de threads à utiliser pour les opérations qui prennent en charge le multi-threading.

public void setUseNNAPI (booléen useNNAPI)

Cette méthode était obsolète au niveau de l'API .
Préférez utiliser setUseNNAPI(boolean) directement pour activer l'API NN. Cette méthode sera supprimée dans une prochaine version.

Active / désactive Android NNAPI pour l'accélération matérielle lorsqu'elle est disponible.