Obsługiwane Wybierz operatory TensorFlow

Główne operatory TensorFlow

Poniżej znajduje się wyczerpująca lista podstawowych operacji TensorFlow, które są obsługiwane przez środowisko wykonawcze TensorFlow Lite z funkcją Select TensorFlow Ops.

Operatory TensorFlow Text i SentencePiece

Następujące operatory TensorFlow Text i SentencePiece są obsługiwane, jeśli używasz interfejsu API języka Python do konwersji i importowania tych bibliotek.

TF. Operatory tekstowe:

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

Operatory SentencePiece:

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

Poniższy fragment pokazuje, jak konwertować modele za pomocą powyższych operatorów:

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()

Po stronie środowiska wykonawczego wymagane jest również połączenie biblioteki TensorFlow Text lub SentencePiece z ostateczną aplikacją lub plikiem binarnym.

Operatorzy zdefiniowani przez użytkownika

Jeśli utworzyłeś własne operatory TensorFlow , możesz również przekonwertować modele je zawierające na TensorFlow Lite, podając wymagane operatory w pliku experimental_select_user_tf_ops w następujący sposób:

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()

Po stronie środowiska wykonawczego wymagane jest również połączenie biblioteki operatorów z ostateczną aplikacją lub plikiem binarnym.

Dodaj operatory podstawowe TensorFlow do listy dozwolonych.

Jeśli trafisz na przypadek, w którym operatory podstawowe TensorFlow nie znajdują się na powyższej liście dozwolonych , możesz zgłosić żądanie funkcji tutaj, podając nazwy operatorów podstawowych TensorFlow, których nie ma na liście dozwolonych.

Możesz również utworzyć własne żądanie ściągnięcia z kodu źródłowego. Na przykład, jeśli chcesz dodać raw_ops.StringToNumber do listy dozwolonych, istnieją trzy miejsca do aktualizacji, takie jak ten commit .

(1) Dodaj kod źródłowy jądra operatora do reguły portable_extended_ops_group2 BUILD.

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

        ...
    ],
)

Aby znaleźć odpowiedni plik źródłowy jądra operatora w katalogu tensorflow/core/kernels , możesz przeszukać lokalizację kodu źródłowego, która zawiera następującą deklarację jądra z nazwą operatora:

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

Jeśli istnieją jakieś pliki nagłówkowe w katalogu tensorflow/core/kernels , wymagane w kodzie źródłowym jądra operatora, należy dodać plik nagłówkowy do reguły portable_extended_ops_headers BUILD w następujący sposób:

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

        ...
    ],
)

(2) Dodaj nazwę operatora do listy dozwolonych.

Lista dozwolonych jest zdefiniowana w tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . Nazwa głównego operatora TensorFlow musi być wymieniona, aby była dozwolona przez opcję Wybierz TF.

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

        ...
    });

Ponieważ powyższa lista jest posortowana w porządku alfabetycznym, zadbaj o umieszczenie nazwy we właściwym miejscu.

(3) Dodaj nazwę operatora do tej strony przewodnika.

Aby pokazać włączenie operatora innym programistom, należy również zaktualizować tę stronę przewodnika. Ta strona znajduje się w 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`
...

Ponieważ powyższa lista jest posortowana w porządku alfabetycznym, zadbaj o umieszczenie nazwy we właściwym miejscu.