Использование tf.Transform с TensorFlow 2.x

Начиная с версии tf.Transform 0.30 , поведением по умолчанию является экспорт сохраненной модели TF 2.x, если только поведение TF 2.x не отключено явно. На этой странице представлено руководство по использованию tf.Transform для экспорта графа преобразования в виде сохраненной модели TensorFlow 2.x.

Новое в tf.Transform с TF 2.x

Загрузка моделей Keras в preprocessing_fn

Используйте API tft.make_and_track_object для загрузки моделей Keras, как показано в примере ниже.

def preprocessing_fn(inputs):
  keras_model = tft.make_and_track_object(lambda: tf.keras.models.load_model(...), name='_unique_name')
  ...
  return {'keras_model_output': keras_model(inputs[...])}

Использование модулей TF 2.x tf.hub

Модули концентратора TF 2.x работают в tf.Transform только тогда, когда preprocessing_fn отслеживается и экспортируется как SavedModel TF 2.x (это поведение по умолчанию, начиная с tensorflow_transform 0.30 ). Используйте API tft.make_and_track_object для загрузки модулей tf.hub , как показано в примере ниже.

def preprocessing_fn(inputs):
  hub_module = tft.make_and_track_object(lambda: hub.load(...))
  ...
  return {'hub_module_output': hub_module(inputs[...])}

Потенциальные проблемы миграции

При переносе существующего конвейера tf.Transform из TF 1.x в TF 2.x могут возникнуть следующие проблемы:

RuntimeError: порядок анализаторов в вашем preprocessing_fn кажется недетерминированным.

В TF 2.x preprocessing_fn , предоставленный пользователем, отслеживается несколько раз. Если порядок обнаружения TFT-анализаторов меняется с каждой трассой, возникает эта ошибка. Это можно исправить, удалив любую недетерминированность в порядке вызова анализаторов TFT.

Вывод transform_raw_features не содержит ожидаемой функции.

Примеры исключений:

KeyError: \<feature key>

или

\<feature key> not found in features dictionary.

TFTransformOutput.transform_raw_features игнорирует параметр drop_unused_features и ведет себя так, как если бы он был True. Обновите все способы использования выходного словаря этого API, чтобы проверить, существует ли в нем ключ, который вы пытаетесь получить.

tf.estimator.BaselineClassifier видит ошибку «Таблица не инициализирована».

Пример исключения:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Table not initialized.

Поддержка Trainer с исполнителем на основе Estimator является максимально возможной. Хотя другие оценщики работают, мы заметили проблемы с инициализацией таблицы в BaselineClassifier. Пожалуйста , отключите TF 2.x в tf.Transform .

Известные проблемы/функции еще не поддерживаются

Вывод словарей в формате TFRecord пока не поддерживается.

tfrecord_gzip пока не поддерживается как допустимое значение для параметра file_format в tft.vocabulary (и других словарных API).

Сохранение устаревшего поведения tf.Transform.

Если ваш конвейер tf.Transform не должен работать с TF 2.x, вы можете сохранить устаревшее поведение одним из следующих способов:

  • Отключите TF2 в tf.Transform , вызвав tf.compat.v1.disable_v2_behavior()
  • Передача force_tf_compat_v1=True для tft_beam.Context , если tf.Transform используется как отдельная библиотека или для компонента Transform в TFX.