| Sottoclassi indirette note |
Interfaccia con l'interprete di modelli TensorFlow Lite, esclusi i metodi sperimentali.
Un'istanza InterpreterApi incapsula un modello TensorFlow Lite preaddestrato, in cui
vengono eseguite per l'inferenza del modello.
Ad esempio, se un modello accetta un solo input e restituisce solo un output:
try (InterpreterApi interpreter =
new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
interpreter.run(input, output);
}
Se un modello accetta più input o output:
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);
}
Se un modello prende o produce tensori di stringa:
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);
}
Tieni presente che esiste una distinzione tra forma [] e forma[1]. Per tensori di stringa scalare genera:
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);
Gli ordini di input e output vengono determinati durante la conversione del modello TensorFlow in TensorFlowLite modello con Toco, così come le forme predefinite degli input.
Quando gli input vengono forniti come array (multidimensionali), i tensori di input corrispondenti
ridimensionato implicitamente in base alla forma dell'array. Quando gli input vengono forniti come tipi Buffer, non viene eseguito il ridimensionamento implicito. il chiamante deve assicurarsi che la dimensione in byte di Buffer corrisponda a quella del tensore corrispondente o che
ridimensiona il tensore tramite resizeInput(int, int[]). Le informazioni su forma e tipo di tensore possono essere
ottenuti tramite il corso Tensor, disponibile tramite getInputTensor(int) e getOutputTensor(int).
ATTENZIONE:InterpreterApi istanze non sono sicure per i thread.
AVVISO: un'istanza InterpreterApi possiede risorse che devono essere
liberati esplicitamente richiamando close()
La libreria TFLite è basata sull'API NDK 19. Può funzionare con livelli API Android inferiori a 19, ma non è garantito.
Classi nidificate
| classe | InterpreterApi.Options | Una classe di opzioni per controllare il comportamento dell'interprete di runtime. | |
Metodi pubblici
| astratto null |
allocateTensors()
Aggiorna in modo esplicito le allocazioni per tutti i tensori, se necessario.
|
| astratto null |
close()
Rilascia le risorse associate all'istanza
InterpreterApi. |
| statico InterpreterApi |
create(opzioni File modelFile, InterpreterApi.Options)
Crea un'istanza
InterpreterApi utilizzando il modello e le opzioni specificati. |
| statico InterpreterApi |
create(opzioni ByteBuffer byteBuffer, InterpreterApi.Options)
Crea un'istanza
InterpreterApi utilizzando il modello e le opzioni specificati. |
| astratto int | |
| astratto Tensor |
getInputTensor(int inputIndex)
Recupera il Tensor associato all'indice di input fornito.
|
| astratto int |
getInputTensorCount()
Restituisce il numero di tensori di input.
|
| astratto Lungo |
getLastNativeInferenceDurationNanoseconds()
Restituisce i tempi di inferenza nativa.
|
| astratto int |
getOutputIndex(Stringa opName)
Ottiene l'indice di un output dato il nome dell'operazione dell'output.
|
| astratto Tensor |
getOutputTensor(int outputIndex)
Recupera il Tensor associato all'indice di output fornito.
|
| astratto int |
getOutputTensorCount()
Ottiene il numero di tensori di output.
|
| astratto null |
resizeInput(int idx, int[] dims, boolean strict)
Ridimensiona l'input idx-th del modello nativo alle dimensioni specificate.
|
| astratto null |
resizeInput(int idx, int[] dims)
Ridimensiona l'input idx-th del modello nativo alle dimensioni specificate.
|
| astratto null | |
| astratto null |
runForMultipleInputsOutputs(input Object[], output Map<Integer, Object> output)
Esegue l'inferenza del modello se il modello accetta più input o restituisce più output.
|
Metodi ereditati
Metodi pubblici
pubblica astratto null . allocateTensors ()
Aggiorna in modo esplicito le allocazioni per tutti i tensori, se necessario.
Questo propaga le forme e le allocazioni di memoria per i tensori dipendenti utilizzando l'input le forme dei tensori date.
Nota: questa chiamata è *solo facoltativa*. L'allocazione del tensore avviene automaticamente se qualche tensore di input è stato ridimensionato. Questa chiamata è particolarmente utile per determinare forme per qualsiasi tensore di output prima di eseguire il grafico, ad esempio
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...Nota: alcuni grafici hanno output di forma dinamica, nel qual caso la forma di output potrebbe non si propagano completamente fino all'esecuzione dell'inferenza.
Lanci
| IllegalStateException | se non è stato possibile allocare correttamente i tensori del grafico. |
|---|
pubblica astratto null . chiudi ()
Rilascia le risorse associate all'istanza InterpreterApi.
pubblica statico InterpreterApi crea (File modelFile, InterpreterApi.Options)
Crea un'istanza InterpreterApi utilizzando il modello e le opzioni specificati. Il modello
verrà caricato da un file.
Parametri
| modelFile | Un file contenente un modello TF Lite preaddestrato. |
|---|---|
| opzioni | Un insieme di opzioni per personalizzare il comportamento dell'interprete. |
Lanci
| IllegalArgumentException | se modelFile non codifica un TensorFlow Lite valido
un modello di machine learning.
|
|---|
pubblica statico InterpreterApi crea (ByteBuffer byteBuffer, InterpreterApi.Options)
Crea un'istanza InterpreterApi utilizzando il modello e le opzioni specificati. Il modello
verrà letto da un ByteBuffer.
Parametri
| byteBuffer | Un modello TF Lite preaddestrato, in formato binario serializzato. ByteBuffer deve
non può essere modificato dopo la creazione di un'istanza InterpreterApi. ByteBuffer può essere un MappedByteBuffer che mappa in memoria il file di un modello oppure un
ByteBuffer diretto di nativeOrder() che include i contenuti in byte di un modello. |
|---|---|
| opzioni | Un insieme di opzioni per personalizzare il comportamento dell'interprete. |
Lanci
| IllegalArgumentException | se byteBuffer non è MappedByteBuffer né un
diretto ByteBuffer di nativeOrder.
|
|---|
pubblica astratto int . getInputIndex (Stringa opName)
Ottiene l'indice di un input dato il nome dell'operazione dell'input.
Parametri
| opName |
|---|
Lanci
| IllegalArgumentException | se opName non corrisponde ad alcun input nel modello utilizzato
per inizializzare l'interprete.
|
|---|
pubblica astratto Tensor getInputTensor (int inputIndex)
Recupera il Tensor associato all'indice di input fornito.
Parametri
| inputIndex |
|---|
Lanci
| IllegalArgumentException | se inputIndex è negativo o non è minore di
di input del modello.
|
|---|
pubblica astratto int . getInputTensorCount ()
Restituisce il numero di tensori di input.
pubblica astratto Lungo getLastNativeInferenceDurationNanoseconds ()
Restituisce i tempi di inferenza nativa.
Lanci
| IllegalArgumentException | se il modello non viene inizializzato dall'interprete. |
|---|
pubblica astratto int . getOutputIndex (Stringa opName)
Ottiene l'indice di un output dato il nome dell'operazione dell'output.
Parametri
| opName |
|---|
Lanci
| IllegalArgumentException | se opName non corrisponde ad alcun output nel modello utilizzato
per inizializzare l'interprete.
|
|---|
pubblica astratto Tensor getOutputTensor (int outputIndex)
Recupera il Tensor associato all'indice di output fornito.
Nota: i dettagli del tensore di output (ad es. forma) potrebbero non essere compilati completamente fino a dopo l'inferenza
viene eseguito. Se hai bisogno di aggiornare i dettagli *prima* di eseguire l'inferenza (ad es. dopo aver ridimensionato
tensore di input, che può invalidare le forme del tensore di output), usa allocateTensors() per
attivare esplicitamente l'allocazione e la propagazione della forma. Ricorda che, per i grafici con forme di output
che dipendono da *valori* di input, la forma di output potrebbe non essere determinata completamente
l'inferenza in esecuzione.
Parametri
| outputIndex |
|---|
Lanci
| IllegalArgumentException | se outputIndex è negativo o non è minore di
di output del modello.
|
|---|
pubblica astratto int . getOutputTensorCount ()
Ottiene il numero di tensori di output.
pubblica astratto null . resizeInput (int idx, int[] dims, booleano rigido)
Ridimensiona l'input idx-th del modello nativo alle dimensioni specificate.
Quando "strict" è impostato su True, possono essere ridimensionate solo le dimensioni sconosciute. Le dimensioni sconosciute sono indicato come "-1" nell'array restituito da "Tensor.shapeSignature()".
Parametri
| IDX | |
|---|---|
| attenua | |
| livello massimo |
Lanci
| IllegalArgumentException | se idx è negativo o non è minore del numero
degli input del modello; o se si verifica un errore durante il ridimensionamento dell'input idx-th. Inoltre, l'errore
si verifica quando si cerca di ridimensionare un tensore con dimensioni fisse quando "strict" è True.
|
|---|
pubblica astratto null . resizeInput (int idx, int[] dims)
Ridimensiona l'input idx-th del modello nativo alle dimensioni specificate.
Parametri
| IDX | |
|---|---|
| attenua |
Lanci
| IllegalArgumentException | se idx è negativo o non è minore del numero
degli input del modello; o se si verifica un errore durante il ridimensionamento dell'input idx-th.
|
|---|
pubblica astratto null . corri (input oggetto, output oggetto)
Esegue l'inferenza del modello se il modello accetta un solo input e fornisce un solo output.
Avviso: l'API è più efficiente se Buffer (preferibilmente diretta, ma non obbligatoria)
viene utilizzato come tipo di dati di input/output. Valuta la possibilità di utilizzare Buffer per il feed e il recupero
per migliorare le prestazioni. I seguenti tipi di Buffer concreti sono
supportati:
ByteBuffer: compatibile con qualsiasi tipo di Tensor primitivo sottostante.FloatBuffer: compatibile con i tensori mobili.IntBuffer- compatibile con i Tensors Int32.LongBuffer- compatibile con i Tensors Int64.
Buffer o come input scalari.Parametri
| input | un array o un array multidimensionale, o un Buffer di tipi primitivi
inclusi int, float, long e byte. Buffer è il metodo preferito per trasmettere contenuti
per i tipi primitivi, mentre i tipi di stringa richiedono l'uso della funzione
di input dell'array. Quando viene utilizzato un Buffer, i relativi contenuti devono rimanere invariati fino a quando
l'inferenza del modello viene completata e il chiamante deve assicurarsi che Buffer sia
posizione di lettura appropriata. Un valore null è consentito solo se il chiamante utilizza un
Delegate che consente l'interoperabilità dell'handle del buffer, che è stato associato alla
inserisci Tensor. |
|---|---|
| output | un array multidimensionale dei dati di output, o Buffer dei tipi primitivi
inclusi int, float, long e byte. Quando si usa un Buffer, il chiamante deve assicurarsi
impostando la posizione di scrittura appropriata. È consentito un valore nullo, utile per
In alcuni casi, ad esempio se il chiamante usa un Delegate che consente l'handle del buffer
interopazione; tale buffer è stato associato all'output Tensor (vedi anche Interpreter.Options#setAllowBufferHandleOutput(boolean)),
oppure se il grafico ha output di forma dinamica e il chiamante deve eseguire una query sulla forma Tensor di output dopo aver richiamato l'inferenza, recuperando i dati direttamente dall'output
tensor (tramite Tensor.asReadOnlyBuffer()). |
Lanci
| IllegalArgumentException | se input è nullo o vuoto oppure se si verifica un errore quando
l'inferenza in esecuzione. |
|---|---|
| IllegalArgumentException | (SPERIMENTALE, soggetta a modifiche) se l'inferenza è
interrotto da setCancelled(true).
|
pubblica astratto null . runForMultipleInputsOutputs (Input Object[], Mappa<Integer, Object> output)
Esegue l'inferenza del modello se il modello accetta più input o restituisce più output.
Avviso: l'API è più efficiente se Buffer (preferibilmente diretta, ma non obbligatoria)
vengono utilizzati come tipi di dati di input/output. Valuta la possibilità di utilizzare Buffer per il feed e il recupero
per migliorare le prestazioni. I seguenti tipi di Buffer concreti sono
supportati:
ByteBuffer: compatibile con qualsiasi tipo di Tensor primitivo sottostante.FloatBuffer: compatibile con i tensori mobili.IntBuffer- compatibile con i Tensors Int32.LongBuffer- compatibile con i Tensors Int64.
Buffer o come input scalari.
Nota: i valori null per gli elementi individuali di inputs e outputs sono
consentito solo se il chiamante utilizza un Delegate che consente l'interoperabilità dell'handle del buffer e
tale buffer è stato associato allo Tensor(i) input o output corrispondente.
Parametri
| nascosti | un array di dati di input. Gli input devono essere nello stesso ordine degli input del metodo
un modello di machine learning. Ogni input può essere un array, un array multidimensionale o un Buffer di
tipi primitivi tra cui int, float, long e byte. Buffer è il metodo preferito
per passare grandi dati di input, mentre i tipi di stringa richiedono l'uso dell'array (multidimensionale)
del percorso di input. Quando viene utilizzato Buffer, i relativi contenuti devono rimanere invariati fino al modello
viene eseguita l'inferenza e il chiamante deve assicurarsi che Buffer sia nel giusto
posizione letta. |
|---|---|
| output | una mappa che mappa gli indici di output ad array multidimensionali di dati di output o Buffer di tipi primitivi, inclusi int, float, long e byte. Deve solo mantenere
per gli output da utilizzare. Quando si usa un Buffer, il chiamante deve assicurarsi
impostando la posizione di scrittura appropriata. La mappa potrebbe essere vuota nei casi in cui
Gli handle del buffer vengono utilizzati per i dati dei tensori di output o nei casi in cui gli output vengono
e il chiamante deve eseguire una query sulla forma di output Tensor dopo che è stata
richiamato, recuperando i dati direttamente dal tensore di output (tramite Tensor.asReadOnlyBuffer()). |
Lanci
| IllegalArgumentException | se inputs è nullo o vuoto, se outputs è
nullo o se si verifica un errore durante l'esecuzione dell'inferenza.
|
|---|