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