A partir de la versión 0.30
de tf.Transform
, el comportamiento predeterminado es exportar un modelo guardado de TF 2.x a menos que los comportamientos de TF 2.x estén explícitamente deshabilitados. Esta página proporciona una guía para usar tf.Transform
para exportar el gráfico de transformación como un modelo guardado de TensorFlow 2.x.
Nuevo en tf.Transform con TF 2.x
Cargando modelos de Keras dentro de preprocessing_fn
Utilice la API tft.make_and_track_object
para cargar modelos de Keras como se muestra en el siguiente ejemplo.
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[...])}
Usando módulos TF 2.x tf.hub
Los módulos hub de TF 2.x funcionan en tf.Transform
solo cuando preprocessing_fn
se rastrea y se exporta como un modelo guardado de TF 2.x (este es el comportamiento predeterminado a partir de tensorflow_transform 0.30
). Utilice la API tft.make_and_track_object
para cargar módulos tf.hub
como se muestra en el siguiente ejemplo.
def preprocessing_fn(inputs):
hub_module = tft.make_and_track_object(lambda: hub.load(...))
...
return {'hub_module_output': hub_module(inputs[...])}
Posibles problemas migratorios
Si se migra una canalización tf.Transform
existente de TF 1.x a TF 2.x, se pueden encontrar los siguientes problemas:
RuntimeError: el orden de los analizadores en su preprocessing_fn
parece no determinista.
En TF 2.x, el preprocessing_fn
proporcionado por el usuario se rastrea varias veces. Si el orden en el que se encuentran los analizadores TFT cambia con cada seguimiento, se generará este error. Esto se puede solucionar eliminando cualquier no determinismo en el orden en que se invocan los analizadores TFT.
La salida de transform_raw_features
no contiene la característica esperada.
Excepciones de ejemplo:
KeyError: \<feature key>
o
\<feature key> not found in features dictionary.
TFTransformOutput.transform_raw_features
ignora el parámetro drop_unused_features
y se comporta como si fuera Verdadero. Actualice cualquier uso del diccionario de salida de esta API para verificar si la clave que está intentando recuperar existe en él.
tf.estimator.BaselineClassifier ve el error Tabla no inicializada.
Excepción de ejemplo:
tensorflow.python.framework.errors_impl.FailedPreconditionError: Table not initialized.
El soporte para Trainer con ejecutor basado en Estimator es el mejor esfuerzo. Si bien otros estimadores funcionan, hemos visto problemas con la inicialización de la tabla en BaselineClassifier. Desactive TF 2.x en tf.Transform
.
Problemas conocidos/funciones aún no compatibles
Aún no se admite la salida de vocabularios en formato TFRecord.
tfrecord_gzip
aún no se admite como valor válido para el parámetro file_format
en tft.vocabulary
(y otras API de vocabulario).
Conservar el comportamiento heredado de tf.Transform
Si su canalización tf.Transform
no debe ejecutarse con TF 2.x, puede conservar el comportamiento heredado de una de las siguientes maneras:
- Deshabilite TF2 en
tf.Transform
llamandotf.compat.v1.disable_v2_behavior()
- Pasar
force_tf_compat_v1=True
atft_beam.Context
si usatf.Transform
como biblioteca independiente o al componente Transform en TFX.