A partir da versão 0.30
do tf.Transform
, o comportamento padrão é exportar um TF 2.x SavedModel, a menos que os comportamentos do TF 2.x sejam explicitamente desabilitados. Esta página fornece um guia para usar tf.Transform
para exportar o gráfico de transformação como um SavedModel do TensorFlow 2.x.
Novo no tf.Transform com TF 2.x
Carregando modelos Keras dentro do preprocessing_fn
Use a API tft.make_and_track_object
para carregar modelos Keras conforme mostrado no exemplo abaixo.
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
Os módulos do hub TF 2.x funcionam em tf.Transform
somente quando o preprocessing_fn
é rastreado e exportado como um TF 2.x SavedModel (este é o comportamento padrão começando com tensorflow_transform 0.30
). Use a API tft.make_and_track_object
para carregar módulos tf.hub
conforme mostrado no exemplo abaixo.
def preprocessing_fn(inputs):
hub_module = tft.make_and_track_object(lambda: hub.load(...))
...
return {'hub_module_output': hub_module(inputs[...])}
Potenciais problemas de migração
Ao migrar um pipeline tf.Transform
existente do TF 1.x para o TF 2.x, os seguintes problemas poderão ser encontrados:
RuntimeError: A ordem dos analisadores em seu preprocessing_fn
parece não ser determinística.
No TF 2.x, o preprocessing_fn
fornecido pelo usuário é rastreado diversas vezes. Se a ordem em que os analisadores TFT são encontrados mudar a cada rastreamento, esse erro será gerado. Isso pode ser corrigido removendo qualquer não-determinismo na ordem em que os analisadores TFT são invocados.
A saída de transform_raw_features
não contém o recurso esperado.
Exceções de exemplo:
KeyError: \<feature key
ou
\<feature key> not found in features dictionary.
TFTransformOutput.transform_raw_features
ignora o parâmetro drop_unused_features
e se comporta como se fosse True. Atualize todos os usos do dicionário de saída desta API para verificar se a chave que você está tentando recuperar existe nela.
tf.estimator.BaselineClassifier vê erro de tabela não inicializada.
Exceção de exemplo:
tensorflow.python.framework.errors_impl.FailedPreconditionError: Table not initialized.
O suporte para Trainer com executor baseado em Estimador é o melhor esforço. Embora outros estimadores funcionem, vimos problemas com a inicialização da tabela no BaselineClassifier. Desative o TF 2.x em tf.Transform
.
Problemas conhecidos/Recursos ainda não suportados
A saída de vocabulários no formato TFRecord ainda não é suportada.
tfrecord_gzip
ainda não é suportado como um valor válido para o parâmetro file_format
em tft.vocabulary
(e outras APIs de vocabulário).
Mantendo o comportamento legado do tf.Transform
Se o pipeline tf.Transform
não for executado com o TF 2.x, você poderá manter o comportamento legado de uma das seguintes maneiras:
- Desative o TF2 em
tf.Transform
chamandotf.compat.v1.disable_v2_behavior()
- Passando
force_tf_compat_v1=True
paratft_beam.Context
se estiver usandotf.Transform
como uma biblioteca independente ou para o componente Transform no TFX.