Начиная с версии 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.