Начиная с версии 0.30
tf.Transform
по умолчанию используется экспорт SavedModel 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.