Interpreter

public final class Interprète

Classe pilote permettant de piloter l'inférence de modèle avec TensorFlow Lite.

Remarque: Si vous n'avez besoin d'accéder à aucune des fonctionnalités fonctionnalités de l'API ci-dessous, utilisez plutôt InterpreterApi et InterpreterFactory au lieu d'utiliser directement Interpreter.

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

Par exemple, si un modèle n'accepte 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<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 modèle accepte ou produit des Tensors 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);
 }
 

Notez qu'il existe une distinction entre les formes [] et shape[1]. Pour Tensor de chaîne scalaire résultats:

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

L'ordre des entrées et des sorties est déterminé lors de la conversion du modèle TensorFlow en TensorFlow Lite 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 Tensors d'entrée correspondants être implicitement redimensionné en fonction de la forme de ce tableau. Lorsque les entrées sont fournies en tant que Buffer aucun redimensionnement implicite n'est effectué. l'appelant doit s'assurer que la taille d'octets de Buffer soit correspond à celui du Tensor correspondant, soit il redimensionne d'abord le Tensor via resizeInput(int, int[]). Vous pouvez obtenir des informations sur la forme et le type de Tensor via la classe Tensor, disponible via getInputTensor(int) et getOutputTensor(int).

AVERTISSEMENT:Interpreter instances ne sont pas sécurisées. 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 19 du NDK. Cela peut fonctionner pour les niveaux d'API Android inférieurs à 19, mais ce n'est pas garanti.

Classes imbriquées

classe Interpreter.Options Classe d'options permettant de contrôler le comportement de l'interpréteur lors de l'exécution.

Constructeurs publics

Interpréteur(fichier modelFile)
Initialise un Interpreter.
Interpreter(options File modelFile, Interpreter.Options)
Initialise un Interpreter et spécifie les options pour personnaliser le comportement de l'interpréteur.
Interpréteur(byteBuffer ByteBuffer)
Initialise un Interpreter avec l'élément ByteBuffer d'un fichier de modèle.
Interpreter(byteBuffer ByteBuffer, options Interpreter.Options)
Initialise un Interpreter avec le ByteBuffer d'un fichier de modèle et un ensemble de Interpreter.Options personnalisé.

Méthodes publiques

vide
allocateTensors()
Met à jour explicitement les allocations pour tous les Tensors, si nécessaire.
vide
close()
Libérez les ressources associées à l'instance InterpreterApi.
int
getInputIndex(Chaîne opName)
Récupère l'index d'une entrée en fonction du nom d'opération de l'entrée.
Tensor
getInputTensor(int inputIndex)
Récupère le Tensor associé à l'index d'entrée fourni.
int
getInputTensorCount()
Récupère le nombre de Tensors d'entrée.
Tensor
getInputTensorFromSignature(String inputName, String signatureKey)
Récupère le Tensor associé au nom d'entrée et au nom de la méthode de signature fournis.
Long
getLastNativeInferenceDurationNanoseconds()
Renvoie la durée d'inférence native.
int
getOutputIndex(Chaîne opName)
Récupère l'index d'une sortie en fonction du nom d'opération de la sortie.
Tensor
getOutputTensor(int outputIndex)
Récupère le Tensor associé à l'index de sortie fourni.
int
getOutputTensorCount()
Récupère le nombre de Tensors de sortie.
Tensor
getOutputTensorFromSignature(String outputName, String signatureKey)
Récupère le Tensor associé au nom de sortie fourni dans une méthode de signature spécifique.
String[]
getSignatureInputs(String signatureKey)
Récupère la liste des entrées SignatureDefs pour la méthode signatureKey.
String[]
getSignatureKeys()
Récupère la liste des noms des méthodes SignatureDef exportées disponibles dans le modèle.
String[]
getSignatureOutputs(String signatureKey)
Récupère la liste des sorties SignatureDefs pour la méthode signatureKey.
vide
resetVariableTensors()
Avancé: réinitialise tous les Tensors variables à la valeur par défaut.
vide
resizeInput(int idx, int[] dims, boolean strict)
Redimensionne l'entrée IDx-ième du modèle natif en fonction des assombrissements donnés.
vide
resizeInput(int idx, int[] dims)
Redimensionne l'entrée IDx-ième du modèle natif en fonction des assombrissements donnés.
vide
run(entrée d'objet, sortie d'objet)
Exécute l'inférence de modèle si le modèle n'accepte qu'une seule entrée et ne fournit qu'une seule sortie.
vide
runForMultipleInputsOutputs(entrées Object[], Map <Integerobjets> sorties)
Exécute l'inférence de modèle si le modèle accepte plusieurs entrées ou renvoie plusieurs sorties.
vide
runSignature(entrées de map<chaîneobjet>, mappage<chaîne, sorties d'objet>)
Identique à runSignature(Map, Map, String), mais ne nécessite pas de transmettre de signatureKey. en supposant que le modèle possède un élément SignatureDef.
vide
runSignature(entrées de map<StringObject>, Map<StringObject>, String signatureKey)
Exécute l'inférence de modèle basée sur SignatureDef fournie via signatureKey.
vide
setCancelled(booléen annulé)
Avancé: interrompt l'inférence en cours d'appel à run(Object, Object).

Méthodes héritées

Constructeurs publics

<ph type="x-smartling-placeholder"></ph> public Interprète (Fichier modelFile)

Initialise un Interpreter.

Paramètres
modelFile le fichier d'un modèle TF Lite pré-entraîné.
Génère
IllegalArgumentException Si modelFile n'encode pas de code TensorFlow Lite valide dans un modèle de ML.

<ph type="x-smartling-placeholder"></ph> public Interprète (options Fichier modelFile, Interpreter.Options)

Initialise un Interpreter et spécifie les options pour personnaliser le comportement de l'interpréteur.

Paramètres
modelFile un fichier d'un modèle TF Lite pré-entraîné
options Ensemble d'options permettant de personnaliser le comportement de l'interprète
Génère
IllegalArgumentException Si modelFile n'encode pas de code TensorFlow Lite valide dans un modèle de ML.

<ph type="x-smartling-placeholder"></ph> public Interprète (ByteBuffer byteBuffer)

Initialise un Interpreter avec l'élément ByteBuffer d'un fichier de modèle.

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

Paramètres
byteBuffer
Génère
IllegalArgumentException Si byteBuffer n'est pas de type MappedByteBuffer ni de type la valeur ByteBuffer directe de nativeOrder.

<ph type="x-smartling-placeholder"></ph> public Interprète (options ByteBuffer byteBuffer, Interpreter.Options)

Initialise un Interpreter avec le ByteBuffer d'un fichier de modèle et un ensemble de Interpreter.Options personnalisé.

Le ByteBuffer ne doit pas être modifié après la construction d'un Interpreter. Le ByteBuffer peut être un MappedByteBuffer qui mappe la mémoire. Un fichier de modèle, ou une ByteBuffer directe de nativeOrder(), qui contient le contenu des octets d'un modèle.

Paramètres
byteBuffer
options
Génère
IllegalArgumentException Si byteBuffer n'est pas de type MappedByteBuffer ni de type la valeur ByteBuffer directe de nativeOrder.

Méthodes publiques

<ph type="x-smartling-placeholder"></ph> public vide allocateTensors ()

Met à jour explicitement les allocations pour tous les Tensors, si nécessaire.

Cela propagera les formes et les allocations de mémoire pour les Tensors dépendants en utilisant l'entrée forme(s) de Tensor telles qu'elles sont fournies.

Remarque: Cet appel est *purement facultatif*. L'allocation de Tensor s'effectue automatiquement l'exécution si des Tensors d'entrée ont été redimensionnés. Cet appel est particulièrement utile pour déterminer pour tous les Tensors 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...

Remarque: Certains graphiques ont des sorties de forme dynamique. Dans ce cas, il est possible que la forme de sortie se propagent entièrement jusqu'à l'exécution de l'inférence.

<ph type="x-smartling-placeholder"></ph> public vide fermer ()

Libérez les ressources associées à l'instance InterpreterApi.

<ph type="x-smartling-placeholder"></ph> public entier getInputIndex (Chaîne opName)

Récupère l'index d'une entrée en fonction du nom d'opération de l'entrée.

Paramètres
opName

<ph type="x-smartling-placeholder"></ph> public Tensor getInputTensor (int inputIndex)

Récupère le Tensor associé à l'index d'entrée fourni.

Paramètres
inputIndex

<ph type="x-smartling-placeholder"></ph> public entier getInputTensorCount ()

Récupère le nombre de Tensors d'entrée.

<ph type="x-smartling-placeholder"></ph> public Tensor getInputTensorFromSignature (Chaîne inputName, Chaîne signatureKey)

Récupère le Tensor associé au nom d'entrée et au nom de la méthode de signature fournis.

AVERTISSEMENT: Cette API est expérimentale et susceptible d'être modifiée.

Paramètres
inputName Saisissez le nom dans la signature.
signatureKey La clé de signature identifiant la signature SignatureDef peut être nulle si le modèle une signature.
Génère
IllegalArgumentException si inputName ou signatureKey est nul ou vide, ou si un nom incorrect a été fourni.

<ph type="x-smartling-placeholder"></ph> public Version longue getLastNativeInferenceDurationNanoseconds ()

Renvoie la durée d'inférence native.

<ph type="x-smartling-placeholder"></ph> public entier getOutputIndex (Chaîne opName)

Récupère l'index d'une sortie en fonction du nom d'opération de la sortie.

Paramètres
opName

<ph type="x-smartling-placeholder"></ph> public Tensor getOutputTensor (int outputIndex)

Récupère le Tensor associé à l'index de sortie fourni.

Remarque: Les détails du Tensor de sortie (par exemple, la forme) peuvent ne pas être entièrement renseignés avant l'inférence s'exécute. Si vous avez besoin de mettre à jour les détails *avant* d'exécuter l'inférence (par exemple, après avoir redimensionné un Tensor d'entrée, ce qui peut invalider la forme des Tensors de sortie), utilisez allocateTensors() pour déclencher explicitement l'allocation et la propagation des formes. Notez que, pour les graphiques avec des formes de sortie, qui dépendent des *valeurs* d'entrée, il est possible que la forme de sortie ne soit pas entièrement déterminée avant que lors de l'exécution de l'inférence.

Paramètres
outputIndex

<ph type="x-smartling-placeholder"></ph> public entier getOutputTensorCount ()

Récupère le nombre de Tensors de sortie.

<ph type="x-smartling-placeholder"></ph> public Tensor getOutputTensorFromSignature (String outputName, Chaîne signatureKey)

Récupère le Tensor associé au nom de sortie fourni dans une méthode de signature spécifique.

Remarque: Les détails du Tensor de sortie (par exemple, la forme) peuvent ne pas être entièrement renseignés avant l'inférence s'exécute. Si vous avez besoin de mettre à jour les détails *avant* d'exécuter l'inférence (par exemple, après avoir redimensionné un Tensor d'entrée, ce qui peut invalider la forme des Tensors de sortie), utilisez allocateTensors() pour déclencher explicitement l'allocation et la propagation des formes. Notez que, pour les graphiques avec des formes de sortie, qui dépendent des *valeurs* d'entrée, il est possible que la forme de sortie ne soit pas entièrement déterminée avant que lors de l'exécution de l'inférence.

AVERTISSEMENT: Cette API est expérimentale et susceptible d'être modifiée.

Paramètres
outputName Nom de sortie dans la signature.
signatureKey La clé de signature identifiant la signature SignatureDef peut être nulle si le modèle une signature.
Génère
IllegalArgumentException si outputName ou signatureKey est nul, ou vide ou un nom incorrect a été fourni.

<ph type="x-smartling-placeholder"></ph> public String[] getSignatureInputs (Chaîne signatureKey)

Récupère la liste des entrées SignatureDefs pour la méthode signatureKey.

AVERTISSEMENT: Cette API est expérimentale et susceptible d'être modifiée.

Paramètres
signatureKey

<ph type="x-smartling-placeholder"></ph> public String[] getSignatureKeys ()

Récupère la liste des noms des méthodes SignatureDef exportées disponibles dans le modèle.

AVERTISSEMENT: Cette API est expérimentale et susceptible d'être modifiée.

<ph type="x-smartling-placeholder"></ph> public String[] getSignatureOutputs (Chaîne signatureKey)

Récupère la liste des sorties SignatureDefs pour la méthode signatureKey.

AVERTISSEMENT: Cette API est expérimentale et susceptible d'être modifiée.

Paramètres
signatureKey

<ph type="x-smartling-placeholder"></ph> public vide resetVariableTensors ()

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

Si un Tensor variable n'est associé à aucun tampon, il est réinitialisé.

AVERTISSEMENT: Cette API est expérimentale et susceptible d'être modifiée.

<ph type="x-smartling-placeholder"></ph> public vide resizeInput (int idx, int[] dims, boolean strict)

Redimensionne l'entrée IDx-ième du modèle natif en fonction des assombrissements donnés.

Lorsque "strict" est défini sur "True", seules les dimensions inconnues peuvent être redimensionnées. Les dimensions inconnues sont indiquée par "-1" dans le tableau renvoyé par "Tensor.shapeSignature()".

Paramètres
IDX
baisse la luminosité
strict

<ph type="x-smartling-placeholder"></ph> public vide resizeInput (int idx, int[] dims)

Redimensionne l'entrée IDx-ième du modèle natif en fonction des assombrissements donnés.

Paramètres
IDX
baisse la luminosité

<ph type="x-smartling-placeholder"></ph> public vide courir (entrée d'objet, sortie d'objet)

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

Avertissement: L'API est plus efficace si un Buffer (de préférence direct, mais non requis) est utilisé comme type de données d'entrée/sortie. Vous pouvez utiliser Buffer pour alimenter et récupérer primitives pour de meilleures performances. Les types Buffer concrets suivants sont compatibles:

  • ByteBuffer : compatible avec n'importe quel type de Tensor primitif sous-jacent.
  • FloatBuffer : compatible avec les Tensors à virgule flottante.
  • IntBuffer : compatible avec les Tensors int32.
  • LongBuffer : compatible avec les Tensors int64.
Notez que les types booléens ne sont acceptés que sous forme de tableaux, pas de valeurs Buffer, ou d'entrées scalaires.

Paramètres
entrée un tableau ou un tableau multidimensionnel, ou une Buffer de types primitifs y compris int, float, long et byte. Buffer est le moyen privilégié pour transmettre des des données d'entrée pour les types primitifs, alors que les types chaîne nécessitent l'utilisation de la méthode chemin d'entrée du tableau. Lorsqu'un Buffer est utilisé, son contenu doit rester inchangé jusqu'à l'inférence de modèle est terminée, et l'appelant doit s'assurer que Buffer se trouve au la position de lecture appropriée. Une valeur null n'est autorisée que si l'appelant utilise un Delegate qui permet l'interopérabilité du handle de tampon, et un tel tampon a été lié au entrée Tensor.
output un tableau multidimensionnel de données de sortie ou une Buffer de types primitifs y compris int, float, long et byte. Lorsqu'un Buffer est utilisé, l'appelant doit s'assurer que la position d'écriture appropriée est définie. Une valeur NULL est autorisée et est utile pour Dans certains cas, par exemple, si l'appelant utilise un Delegate qui autorise le handle de tampon et l'interopérabilité, et ce tampon a été lié à la sortie Tensor (voir aussi Interpreter.Options#setAllowBufferHandleOutput(boolean)). Ou, si le graphe présente des sorties de forme dynamique et que l'appelant doit interroger la forme Tensor de sortie après l'appel de l'inférence, en récupérant les données directement à partir de la sortie Tensor (via Tensor.asReadOnlyBuffer()).

<ph type="x-smartling-placeholder"></ph> public vide runForMultipleInputsOutputs (entrées Objet[], Carte<EntierSorties d'objet>)

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

Avertissement: L'API est plus efficace si Buffer (de préférence directe, mais non obligatoire) sont utilisés comme types de données d'entrée/sortie. Vous pouvez utiliser Buffer pour alimenter et récupérer primitives pour de meilleures performances. Les types Buffer concrets suivants sont compatibles:

  • ByteBuffer : compatible avec n'importe quel type de Tensor primitif sous-jacent.
  • FloatBuffer : compatible avec les Tensors à virgule flottante.
  • IntBuffer : compatible avec les Tensors int32.
  • LongBuffer : compatible avec les Tensors int64.
Notez que les types booléens ne sont acceptés que sous forme de tableaux, pas de valeurs Buffer, ou d'entrées scalaires.

Remarque: Les valeurs null pour les éléments individuels de inputs et outputs sont autorisé uniquement si l'appelant utilise un Delegate qui autorise l'interopérabilité du gestionnaire de tampon, et un tel tampon a été lié aux Tensor d'entrée ou de sortie correspondants.

Paramètres
cachées un tableau de données d'entrée. Les entrées doivent être dans le même ordre que les entrées de la dans un modèle de ML. Chaque entrée peut être un tableau ou un tableau multidimensionnel, ou une Buffer de types primitifs dont int, float, long et byte. Buffer est l'option à privilégier pour transmettre des données d'entrée volumineuses, alors que les types "string" (chaîne) nécessitent l'utilisation d'un tableau (multidimensionnel). chemin d'entrée. Lorsque Buffer est utilisé, son contenu ne doit pas être modifié jusqu'à ce que le modèle l'inférence est effectuée, et l'appelant doit s'assurer que Buffer se trouve au niveau en lecture seule.
résultats Une carte mappant des index de sortie à des tableaux multidimensionnels de données de sortie ou à des Buffer de types primitifs, y compris int, float, long et byte. Il suffit de garder les entrées des sorties à utiliser. Lorsqu'un Buffer est utilisé, l'appelant doit s'assurer que la position d'écriture appropriée est définie. La carte peut être vide dans les cas où : les poignées de tampon sont utilisées pour les données de Tensor de sortie, ou dans les cas où les sorties sont dynamiquement et l'appelant doit interroger la forme Tensor de sortie une fois l'inférence terminée en récupérant les données directement à partir du Tensor de sortie (via Tensor.asReadOnlyBuffer()).

<ph type="x-smartling-placeholder"></ph> public vide runSignature (Map<StringObject> entrées, Map<StringObject> sorties)

Identique à runSignature(Map, Map, String), mais ne nécessite pas de transmettre de signatureKey. en supposant que le modèle possède un élément SignatureDef. Si le modèle comporte plusieurs SignatureDef, générer une exception.

AVERTISSEMENT: Cette API est expérimentale et susceptible d'être modifiée.

Paramètres
cachées
sorties

<ph type="x-smartling-placeholder"></ph> public vide runSignature (Map<StringObject> entrées, Map<StringObject> sorties, String signatureKey)

Exécute l'inférence de modèle basée sur SignatureDef fournie via signatureKey.

Consultez run(Object, Object) pour en savoir plus sur les entrées et sorties autorisées types de données.

AVERTISSEMENT: Cette API est expérimentale et susceptible d'être modifiée.

Paramètres
cachées Mappage entre le nom d'entrée de SignatureDef et un objet d'entrée.
sorties Mappage entre le nom de sortie dans SignatureDef et les données de sortie. Ce champ peut être vide si l'appelant souhaite interroger les données Tensor directement après l'inférence (par exemple, si le la forme de sortie est dynamique, ou des poignées de tampon de sortie sont utilisées).
signatureKey Clé de signature identifiant la signature SignatureDef.
Génère
IllegalArgumentException si inputs est nul ou vide, si outputs ou signatureKey est nul, ou si une erreur se produit lors de l'exécution de l'inférence.

<ph type="x-smartling-placeholder"></ph> public vide setCancelled (valeur booléenne annulée)

Avancé: interrompt l'inférence en cours d'appel à run(Object, Object).

Un indicateur d'annulation sera défini sur "true" lorsque cette fonction sera appelée. L'interprète vérifiez l'indicateur entre les appels d'opérations. Si la valeur est true, l'interpréteur s'arrête l'exécution. L'interpréteur restera à l'état "Annulé" jusqu'à ce qu'il soit explicitement "annulé" par setCancelled(false)

AVERTISSEMENT: Cette API est expérimentale et susceptible d'être modifiée.

Paramètres
annulé true pour annuler l'inférence de la manière la plus optimale possible ; false jusqu'à reprendre.
Génère
IllegalStateException si l'interpréteur n'est pas initialisé avec la fonction annulable qui est désactivée par défaut.