À 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 :
- Désactivez TF2 dans
tf.Transformen appelanttf.compat.v1.disable_v2_behavior() - Passer
force_tf_compat_v1=Trueàtft_beam.Contextsi vous utiliseztf.Transformen tant que bibliothèque autonome ou au composant Transform dans TFX.