À 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.Transform
en appelanttf.compat.v1.disable_v2_behavior()
- Passer
force_tf_compat_v1=True
àtft_beam.Context
si vous utiliseztf.Transform
en tant que bibliothèque autonome ou au composant Transform dans TFX.