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