A partire dalla versione 0.30
di tf.Transform
, il comportamento predefinito consiste nell'esportare un SavedModel TF 2.x a meno che i comportamenti TF 2.x non siano esplicitamente disabilitati. Questa pagina fornisce una guida per l'utilizzo di tf.Transform
per esportare il grafico di trasformazione come TensorFlow 2.x SavedModel.
Novità in tf.Transform con TF 2.x
Caricamento dei modelli Keras all'interno del preprocessing_fn
Utilizza l'API tft.make_and_track_object
per caricare i modelli Keras come mostrato nell'esempio seguente.
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[...])}
Utilizzando i moduli TF 2.x tf.hub
I moduli hub TF 2.x funzionano in tf.Transform
solo quando preprocessing_fn
viene tracciato ed esportato come SavedModel TF 2.x (questo è il comportamento predefinito a partire da tensorflow_transform 0.30
). Utilizza l'API tft.make_and_track_object
per caricare i moduli tf.hub
come mostrato nell'esempio seguente.
def preprocessing_fn(inputs):
hub_module = tft.make_and_track_object(lambda: hub.load(...))
...
return {'hub_module_output': hub_module(inputs[...])}
Potenziali problemi di migrazione
Se si esegue la migrazione di una pipeline tf.Transform
esistente da TF 1.x a TF 2.x, potrebbero verificarsi i seguenti problemi:
RuntimeError: l'ordine degli analizzatori in preprocessing_fn
sembra non deterministico.
In TF 2.x il preprocessing_fn
fornito dall'utente viene tracciato più volte. Se l'ordine in cui vengono rilevati gli analizzatori TFT cambia con ciascuna traccia, verrà generato questo errore. Questo problema può essere risolto rimuovendo qualsiasi non determinismo nell'ordine in cui vengono richiamati gli analizzatori TFT.
L'output di transform_raw_features
non contiene la funzionalità prevista.
Eccezioni di esempio:
KeyError: \<feature key>
O
\<feature key> not found in features dictionary.
TFTransformOutput.transform_raw_features
ignora il parametro drop_unused_features
e si comporta come se fosse True. Aggiorna eventuali utilizzi del dizionario di output da questa API per verificare se la chiave che stai tentando di recuperare esiste al suo interno.
tf.estimator.BaselineClassifier visualizza l'errore Tabella non inizializzata.
Eccezione di esempio:
tensorflow.python.framework.errors_impl.FailedPreconditionError: Table not initialized.
Il supporto per Trainer con esecutore basato su Estimator è il massimo sforzo. Mentre altri stimatori funzionano, abbiamo riscontrato problemi con l'inizializzazione della tabella in BaselineClassifier. Disattiva TF 2.x in tf.Transform
.
Problemi noti/Funzionalità non ancora supportate
L'output dei vocabolari nel formato TFRecord non è ancora supportato.
tfrecord_gzip
non è ancora supportato come valore valido per il parametro file_format
in tft.vocabulary
(e altre API del vocabolario).
Mantenimento del comportamento tf.Transform legacy
Se la pipeline tf.Transform
non deve essere eseguita con TF 2.x, puoi mantenere il comportamento legacy in uno dei seguenti modi:
- Disabilita TF2 in
tf.Transform
chiamandotf.compat.v1.disable_v2_behavior()
- Passaggio di
force_tf_compat_v1=True
atft_beam.Context
se si utilizzatf.Transform
come libreria autonoma o al componente Transform in TFX.