Utilisation de tf.Transform avec TensorFlow 2.x

À partir de la version 0.30 de tf.Transform , le comportement par défaut consiste à exporter un SavedModel TF 2.x à moins que les comportements TF 2.x ne soient explicitement désactivés. Cette page fournit un guide sur l'utilisation de tf.Transform pour exporter le graphique de transformation en tant que modèle enregistré TensorFlow 2.x.

Nouveau dans tf.Transform avec TF 2.x

Chargement des modèles Keras dans le preprocessing_fn

Veuillez utiliser l'API tft.make_and_track_object pour charger les modèles Keras comme indiqué dans l'exemple ci-dessous.

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[...])}

Utilisation des modules TF 2.x tf.hub

Les modules hub TF 2.x fonctionnent dans tf.Transform uniquement lorsque le preprocessing_fn est tracé et exporté en tant que TF 2.x SavedModel (il s'agit du comportement par défaut à partir de tensorflow_transform 0.30 ). Veuillez utiliser l'API tft.make_and_track_object pour charger les modules tf.hub comme indiqué dans l'exemple ci-dessous.

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

Problèmes de migration potentiels

Lors de la migration d'un pipeline tf.Transform existant de TF 1.x vers TF 2.x, les problèmes suivants peuvent être rencontrés :

RuntimeError : l'ordre des analyseurs dans votre preprocessing_fn semble être non déterministe.

Dans TF 2.x, le preprocessing_fn fourni par l'utilisateur est tracé plusieurs fois. Si l’ordre dans lequel les analyseurs TFT sont rencontrés change à chaque trace, cette erreur sera générée. Ce problème peut être résolu en supprimant tout non-déterminisme dans l'ordre dans lequel les analyseurs TFT sont invoqués.

La sortie de transform_raw_features ne contient pas la fonctionnalité attendue.

Exemples d'exceptions :

KeyError: \<feature key

ou

\<feature key> not found in features dictionary.

TFTransformOutput.transform_raw_features ignore le paramètre drop_unused_features et se comporte comme s'il était True. Veuillez mettre à jour toute utilisation du dictionnaire de sortie de cette API pour vérifier si la clé que vous tentez de récupérer existe.

tf.estimator.BaselineClassifier voit une erreur de table non initialisée.

Exemple d'exception :

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

La prise en charge du formateur avec exécuteur basé sur un estimateur est la meilleure solution. Alors que d'autres estimateurs fonctionnent, nous avons constaté des problèmes avec l'initialisation des tables dans BaselineClassifier. Veuillez désactiver TF 2.x dans tf.Transform .

Problèmes connus / Fonctionnalités non encore prises en charge

La sortie de vocabulaires au format TFRecord n'est pas encore prise en charge.

tfrecord_gzip n'est pas encore pris en charge comme valeur valide pour le paramètre file_format dans tft.vocabulary (et d'autres API de vocabulaire).

Conserver l'ancien comportement de tf.Transform

Si votre pipeline tf.Transform ne doit pas s'exécuter avec TF 2.x, vous pouvez conserver le comportement hérité de l'une des manières suivantes :