Usando tf.Transform com TensorFlow 2.x

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.

Exemplos de exceções:

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: