Ayuda a proteger la Gran Barrera de Coral con TensorFlow en Kaggle Únete Challenge

Operadores seleccionados de TensorFlow admitidos

Operadores principales de TensorFlow

A continuación, se muestra una lista exhaustiva de las operaciones principales de TensorFlow que son compatibles con el tiempo de ejecución de TensorFlow Lite con la función Seleccionar operaciones de TensorFlow.

Operadores TensorFlow Text y SentencePiece

Los siguientes texto TensorFlow y SentencePiece operadores son compatibles si se utiliza la API de Python para la conversión e importar esas bibliotecas.

Operadores TF.Text:

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

Operadores de SentencePiece:

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

El siguiente fragmento muestra cómo convertir modelos con los operadores anteriores:

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

En el lado del tiempo de ejecución, también es necesario vincular la biblioteca TensorFlow Text o SentencePiece a la aplicación final o al binario.

Operadores definidos por el usuario

Si ha creado sus propios operadores TensorFlow , también puede convertir los modelos que los contienen a TensorFlow Lite haciendo una lista de operadores necesarios en los experimental_select_user_tf_ops de la siguiente manera:

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

En el lado del tiempo de ejecución, también es necesario vincular la biblioteca de operadores a la aplicación final o al binario.

Agrega operadores centrales de TensorFlow a la lista permitida.

Si se pulsa el caso de que los operadores de centrales TensorFlow no están en lo anterior permitió la lista , puede informar de la solicitud de función en aquí con los nombres de los operadores de centrales TensorFlow, no aparecen en la lista de permitidos.

También puede crear su propia solicitud de extracción a partir del código fuente. Por ejemplo, si desea agregar el raw_ops.StringToNumber op en la lista de permitidos, hay tres lugares para actualizar como éste cometió .

(1) Añadir el código fuente del núcleo del operador al portable_extended_ops_group2 regla de construcción.

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

        ...
    ],
)

Con el fin de encontrar el archivo fuente del núcleo del operador relvant bajo la tensorflow/core/kernels directorio, puede buscar la ubicación del código fuente, que contiene la siguiente declaración de núcleo con el nombre del operador:

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

Si hay algún archivo de cabecera bajo la tensorflow/core/kernels directorio, requerido en el código fuente del núcleo del operador, es necesario agregar el archivo de cabecera en el portable_extended_ops_headers regla de construcción mientras que sigue:

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

        ...
    ],
)

(2) Agregue el nombre del operador a la lista de permitidos.

La lista de permitidos se define en el tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . El nombre del operador principal de TensorFlow debe aparecer en la lista para que se le permita a través de la opción Seleccionar TF.

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

        ...
    });

Dado que la lista anterior está ordenada alfabéticamente, asegúrese de colocar el nombre en el lugar correcto.

(3) Agregue el nombre del operador a esta página de guía.

Para mostrar la inclusión del operador a los otros desarrolladores, esta página de guía también debe actualizarse. Esta página se encuentra en la 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`
...

Dado que la lista anterior está ordenada alfabéticamente, asegúrese de colocar el nombre en el lugar correcto.