Gli operatori di machine learning (ML) che utilizzi nel tuo modello possono influire sul processo di conversione di un modello TensorFlow nel formato TensorFlow Lite. Il convertitore TensorFlow Lite supporta un numero limitato di operazioni TensorFlow utilizzate nei modelli di inferenza comuni, il che significa che non tutti i modelli sono direttamente convertibili. Lo strumento di conversione ti consente di includere operatori aggiuntivi, ma per convertire un modello in questo modo devi anche modificare l'ambiente di runtime di TensorFlow Lite utilizzato per eseguire il modello, il che può limitare la tua capacità di utilizzare opzioni di deployment del runtime standard, ad esempio Google Play Services.
Il convertitore TensorFlow Lite è progettato per analizzare la struttura del modello e applicare le ottimizzazioni al fine di renderlo compatibile con gli operatori direttamente supportati. Ad esempio, a seconda degli operatori ML nel modello, il convertitore potrebbe elidere o fondere questi operatori per mapparli alle rispettive controparti TensorFlow Lite.
Anche per le operazioni supportate, a volte sono previsti modelli di utilizzo specifici, per motivi di prestazioni. Il modo migliore per capire come creare un modello TensorFlow utilizzabile con TensorFlow Lite è valutare con attenzione le modalità di conversione e ottimizzazione delle operazioni, oltre alle limitazioni imposte da questo processo.
Operatori supportati
Gli operatori integrati di TensorFlow Lite sono un sottoinsieme degli operatori che fanno parte della libreria di base TensorFlow. Il tuo modello TensorFlow può includere anche operatori personalizzati sotto forma di operatori composti o nuovi operatori definiti da te. Il diagramma seguente mostra le relazioni tra questi operatori.
In questa gamma di operatori di modelli ML, sono disponibili 3 tipi di modelli supportati dal processo di conversione:
- Modelli con solo operatore integrato TensorFlow Lite. (consigliata)
- modelli con operatori integrati e operatori principali di TensorFlow selezionati.
- Modelli con operatori integrati, operatori TensorFlow core e/o operatori personalizzati.
Se il modello contiene solo operazioni supportate in modo nativo da TensorFlow Lite, non hai bisogno di flag aggiuntivi per convertirlo. Questo è il percorso consigliato perché questo tipo di modello effettua la conversione senza problemi ed è più semplice da ottimizzare ed eseguire utilizzando il runtime predefinito di TensorFlow Lite. Hai anche altre opzioni di deployment per il tuo modello, ad esempio Google Play Services. Puoi iniziare consultando la guida alla conversione di TensorFlow Lite. Consulta la pagina Ops Lite di TensorFlow per un elenco degli operatori integrati.
Se devi includere operazioni TensorFlow selezionate dalla libreria di base, devi specificarlo al momento della conversione e assicurarti che il runtime includa queste operazioni. Per i passaggi dettagliati, consulta l'argomento Selezionare gli operatori TensorFlow.
Se possibile, evita l'ultima opzione di includere operatori personalizzati nel modello convertito. Gli operatori personalizzati sono operatori creati combinando più operatori principali di TensorFlow primitivi o ne definiscono uno completamente nuovo. Quando gli operatori personalizzati vengono convertiti, possono aumentare le dimensioni del modello complessivo generando dipendenze al di fuori della libreria TensorFlow Lite integrata. Le operazioni personalizzate, se non create appositamente per il deployment di dispositivi mobili o dispositivi, possono comportare prestazioni peggiori quando viene eseguito il deployment su dispositivi con risorse limitate rispetto a un ambiente server. Infine, proprio come nel caso dell'inclusione di alcuni operatori principali di TensorFlow, gli operatori personalizzati richiedono di modificare l'ambiente di runtime del modello in modo da non poter utilizzare i servizi di runtime standard come Google Play Services.
Tipi supportati
La maggior parte delle operazioni TensorFlow Lite ha come target l'inferenza sia in virgola mobile (float32
) che
quantizzata (uint8
, int8
), ma molte operazioni non lo fanno ancora per altri tipi
come tf.float16
e stringhe.
A parte l'utilizzo di una versione diversa delle operazioni, l'altra differenza tra i modelli in virgola mobile e quantiizzati è il modo in cui vengono convertite. La conversione quantificata richiede informazioni sull'intervallo dinamico per i tensori. Ciò richiede la "quantizzazione falsa" durante l'addestramento del modello, il recupero di informazioni sull'intervallo tramite un set di dati di calibrazione o una stima dell'intervallo "al volo". Per ulteriori dettagli, consulta la pagina relativa alla quantizzazione.
Conversioni dirette, pieghevole e fusione costanti
TensorFlow Lite può elaborare diverse operazioni
TensorFlow, anche se non hanno un equivalente diretto. Questo è il caso delle operazioni che possono
essere semplicemente rimosse dal grafico (tf.identity
), sostituite da tensori
(tf.placeholder
) o integrate in operazioni più complesse (tf.nn.bias_add
).
A volte anche alcune operazioni supportate possono essere rimosse tramite uno di questi
processi.
Di seguito è riportato un elenco non esaustivo delle operazioni di TensorFlow che solitamente vengono rimosse dal grafico:
tf.add
tf.debugging.check_numerics
tf.constant
tf.div
tf.divide
tf.fake_quant_with_min_max_args
tf.fake_quant_with_min_max_vars
tf.identity
tf.maximum
tf.minimum
tf.multiply
tf.no_op
tf.placeholder
tf.placeholder_with_default
tf.realdiv
tf.reduce_max
tf.reduce_min
tf.reduce_sum
tf.rsqrt
tf.shape
tf.sqrt
tf.square
tf.subtract
tf.tile
tf.nn.batch_norm_with_global_normalization
tf.nn.bias_add
tf.nn.fused_batch_norm
tf.nn.relu
tf.nn.relu6
Operazioni sperimentali
Le seguenti operazioni TensorFlow Lite sono presenti, ma non sono pronte per i modelli personalizzati:
CALL
CONCAT_EMBEDDINGS
CUSTOM
EMBEDDING_LOOKUP_SPARSE
HASHTABLE_LOOKUP
LSH_PROJECTION
SKIP_GRAM
SVDF