Usando tf.Transform con TensorFlow 2.x

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 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: