Посмотреть на TensorFlow.org | Запустить в Google Colab | Посмотреть на GitHub | Скачать блокнот |
Обзор
Модели машинного обучения часто развертываются с помощью TensorFlow Lite на мобильных, встроенных устройствах и устройствах Интернета вещей, чтобы повысить конфиденциальность данных и сократить время отклика. Эти модели часто требуют поддержки операций обработки текста. TensorFlow Text версии 2.7 и выше обеспечивает повышенную производительность, уменьшенный размер двоичных файлов и операции, специально оптимизированные для использования в этих средах.
Текстовые операторы
Следующие классы TensorFlow Text можно использовать в модели TensorFlow Lite.
-
FastWordpieceTokenizer
-
WhitespaceTokenizer
Пример модели
pip install -U tensorflow-text
from absl import app
import numpy as np
import tensorflow as tf
import tensorflow_text as tf_text
from tensorflow.lite.python import interpreter
В следующем примере кода показан процесс преобразования и интерпретация в Python с использованием простой тестовой модели. Обратите внимание, что вывод модели не может быть объектом tf.RaggedTensor
при использовании TensorFlow Lite. Однако вы можете вернуть компоненты объекта tf.RaggedTensor
или преобразовать его с помощью функции to_tensor
. Подробнее см. в руководстве по RaggedTensor .
class TokenizerModel(tf.keras.Model):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.tokenizer = tf_text.WhitespaceTokenizer()
@tf.function(input_signature=[
tf.TensorSpec(shape=[None], dtype=tf.string, name='input')
])
def call(self, input_tensor):
return { 'tokens': self.tokenizer.tokenize(input_tensor).flat_values }
# Test input data.
input_data = np.array(['Some minds are better kept apart'])
# Define a Keras model.
model = TokenizerModel()
# Perform TensorFlow Text inference.
tf_result = model(tf.constant(input_data))
print('TensorFlow result = ', tf_result['tokens'])
TensorFlow result = tf.Tensor([b'Some' b'minds' b'are' b'better' b'kept' b'apart'], shape=(6,), dtype=string)
Преобразование модели TensorFlow в TensorFlow Lite
При преобразовании модели TensorFlow с текстовыми операторами TensorFlow в TensorFlow Lite необходимо указать TFLiteConverter
, что существуют пользовательские операторы, использующие атрибут allow_custom_ops
, как в примере ниже. Затем вы можете запустить преобразование модели, как обычно. Просмотрите документацию по конвертеру TensorFlow Lite , чтобы получить подробное руководство по основам преобразования модели.
# Convert to TensorFlow Lite.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS]
converter.allow_custom_ops = True
tflite_model = converter.convert()
2022-02-01 12:09:02.062677: W tensorflow/python/util/util.cc:368] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them. INFO:tensorflow:Assets written to: /tmp/tmpiiuhjdn6/assets 2022-02-01 12:09:03.705144: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:363] Ignored output_format. WARNING:absl:Buffer deduplication procedure will be skipped when flatbuffer library is not properly loaded 2022-02-01 12:09:03.705185: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:366] Ignored drop_control_dependency. 2022-02-01 12:09:03.921830: W tensorflow/compiler/mlir/lite/flatbuffer_export.cc:1902] The following operation(s) need TFLite custom op implementation(s): Custom ops: TFText>WhitespaceTokenizeWithOffsetsV2 Details: tf.TFText>WhitespaceTokenizeWithOffsetsV2(tensor<?x!tf_type.string>, tensor<!tf_type.string>) -> (tensor<?x!tf_type.string>, tensor<?xi64>, tensor<?xi32>, tensor<?xi32>) : {device = ""} See instructions: https://www.tensorflow.org/lite/guide/ops_custom
Вывод
Чтобы интерпретатор TensorFlow Lite правильно считывал вашу модель, содержащую текстовые операторы TensorFlow, вы должны настроить его для использования этих пользовательских операторов и предоставить для них методы регистрации. Используйте tf_text.tflite_registrar.SELECT_TFTEXT_OPS
, чтобы предоставить InterpreterWithCustomOps полный набор функций регистрации для поддерживаемых текстовых операторов InterpreterWithCustomOps
.
Обратите внимание, что хотя приведенный ниже пример показывает вывод в Python, шаги аналогичны для других языков с некоторыми незначительными переводами API и необходимостью встроить tflite_registrar
в ваш двоичный файл. Дополнительные сведения см. в разделе TensorFlow Lite Inference .
# Perform TensorFlow Lite inference.
interp = interpreter.InterpreterWithCustomOps(
model_content=tflite_model,
custom_op_registerers=tf_text.tflite_registrar.SELECT_TFTEXT_OPS)
interp.get_signature_list()
{'serving_default': {'inputs': ['input'], 'outputs': ['tokens']} }
Затем интерпретатор TensorFlow Lite вызывается с входными данными, предоставляя результат, который соответствует результату TensorFlow, указанному выше.
tokenize = interp.get_signature_runner('serving_default')
output = tokenize(input=input_data)
print('TensorFlow Lite result = ', output['tokens'])
TensorFlow Lite result = [b'Some' b'minds' b'are' b'better' b'kept' b'apart']