Operatori Select TensorFlow supportati

Operatori principali di TensorFlow

Di seguito è riportato un elenco esaustivo delle operazioni principali di TensorFlow supportate dal runtime TensorFlow Lite con la funzionalità Seleziona TensorFlow Ops.

Operatori TensorFlow Text e SentencePiece

I seguenti operatori TensorFlow Text e SentencePiece sono supportati se utilizzi l'API Python per la conversione e importi tali librerie.

TF.Operatori di testo:

  • CaseFoldUTF8
  • ConstrainedSequence
  • MaxSpanningTree
  • NormalizeUTF8
  • NormalizeUTF8WithOffsetsMap
  • RegexSplitWithOffsets
  • RougeL
  • SentenceFragments
  • SentencepieceOp
  • SentencepieceTokenizeOp
  • SentencepieceTokenizeWithOffsetsOp
  • SentencepieceDetokenizeOp
  • SentencepieceVocabSizeOp
  • SplitMergeTokenizeWithOffsets
  • UnicodeScriptTokenizeWithOffsets
  • WhitespaceTokenizeWithOffsets
  • WordpieceTokenizeWithOffsets

Operatori FrasePiece:

  • SentencepieceGetPieceSize
  • SentencepiecePieceToId
  • SentencepieceIdToPiece
  • SentencepieceEncodeDense
  • SentencepieceEncodeSparse
  • SentencepieceDecode

Il frammento seguente mostra come convertire i modelli con gli operatori sopra indicati:

import tensorflow as tf
# These imports are required to load operators' definition.
import tensorflow_text as tf_text
import sentencepiece as spm

converter = tf.lite.TFLiteConverter.from_keras_model(your_model)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS
]
model_data = converter.convert()

Dal punto di vista del runtime, è inoltre necessario collegare la libreria TensorFlow Text o SentencePiece all'app o al file binario finale.

Operatori definiti dall'utente

Se hai creato i tuoi operatori TensorFlow , puoi anche convertire i modelli che li contengono in TensorFlow Lite elencando gli operatori richiesti in experimental_select_user_tf_ops come segue:

import tensorflow as tf

ops_module = tf.load_op_library('./your_ops_library.so')

converter = tf.lite.TFLiteConverter.from_saved_model(your_model)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS
]
converter.target_spec.experimental_select_user_tf_ops = [
    'your_op_name1',
    'your_op_name2'
]
model_data = converter.convert()

Dal punto di vista del runtime, è inoltre necessario collegare la libreria degli operatori all'app o al binario finale.

Aggiungi gli operatori core TensorFlow all'elenco consentito.

Se ti trovi nel caso in cui gli operatori core di TensorFlow non sono nell'elenco consentito sopra, puoi segnalare la richiesta di funzionalità qui con i nomi degli operatori core di TensorFlow, non elencati nell'elenco consentito.

Puoi anche creare la tua richiesta pull dal codice sorgente. Ad esempio, se desideri aggiungere l'operazione raw_ops.StringToNumber nell'elenco consentito, ci sono tre posizioni in cui aggiornare come questo commit .

(1) Aggiungere il codice sorgente del kernel dell'operatore alla regola BUILD portable_extended_ops_group2 .

filegroup(
    name = "portable_extended_ops_group2",
    srcs = [
        ...
+       "string_to_number_op.cc",

        ...
    ],
)

Per trovare il file sorgente del kernel dell'operatore pertinente nella directory tensorflow/core/kernels , puoi cercare il percorso del codice sorgente, che contiene la seguente dichiarazione del kernel con il nome dell'operatore:

REGISTER_KERNEL_BUILDER(Name("StringToNumber")                 \
                            .Device(DEVICE_CPU)                \
                            .TypeConstraint<type>("out_type"), \
                        StringToNumberOp<type>)

Se sono presenti file di intestazione nella directory tensorflow/core/kernels , richiesti nel codice sorgente del kernel dell'operatore, è necessario aggiungere il file di intestazione nella regola BUILD portable_extended_ops_headers come segue:

filegroup(
    name = "portable_extended_ops_headers",
    srcs = [
        ...
+       "string_util.h",

        ...
    ],
)

(2) Aggiungere il nome dell'operatore all'elenco consentito.

L'elenco consentito è definito in tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . Il nome dell'operatore core TensorFlow deve essere elencato per poter essere autorizzato tramite l'opzione Seleziona TF.

static const std::set<std::string>* allowlisted_flex_ops =
    new std::set<std::string>({
        ...
+       "StringToNumber",

        ...
    });

Poiché l'elenco sopra è ordinato in ordine alfabetico, assicura di posizionare il nome nel posto giusto.

(3) Aggiungere il nome dell'operatore a questa pagina della guida.

Per mostrare l'inclusione dell'operatore agli altri sviluppatori, anche questa pagina della guida dovrebbe essere aggiornata. Questa pagina si trova in tensorflow/lite/g3doc/guide/op_select_allowlist.md .

## TensorFlow core operators

The following is an exhaustive list of TensorFlow core operations that are
supported by TensorFlow Lite runtime with the Select TensorFlow Ops feature.

...
+*   `raw_ops.StringToNumber`
...

Poiché l'elenco sopra è ordinato in ordine alfabetico, assicura di posizionare il nome nel posto giusto.