Korzystanie z tf.Transform z TensorFlow 2.x

Począwszy od wersji 0.30 tf.Transform , domyślnym zachowaniem jest eksportowanie TF 2.x SavedModel, chyba że zachowania TF 2.x są jawnie wyłączone. Ta strona zawiera przewodnik dotyczący używania tf.Transform do eksportowania wykresu transformacji jako zapisany model TensorFlow 2.x.

Nowość w tf.Transform z TF 2.x

Ładowanie modeli Keras w pliku preprocessing_fn

Użyj interfejsu API tft.make_and_track_object , aby załadować modele Keras, jak pokazano w przykładzie poniżej.

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[...])}

Korzystanie z modułów TF 2.x tf.hub

Moduły koncentratora TF 2.x działają w tf.Transform tylko wtedy, gdy preprocessing_fn jest śledzony i eksportowany jako TF 2.x SavedModel (jest to zachowanie domyślne rozpoczynające się od tensorflow_transform 0.30 ). Aby załadować moduły tf.hub , użyj interfejsu API tft.make_and_track_object , jak pokazano w przykładzie poniżej.

def preprocessing_fn(inputs):
  hub_module = tft.make_and_track_object(lambda: hub.load(...))
  ...
  return {'hub_module_output': hub_module(inputs[...])}

Potencjalne problemy z migracją

W przypadku migracji istniejącego potoku tf.Transform z TF 1.x do TF 2.x mogą wystąpić następujące problemy:

RuntimeError: Kolejność analizatorów w preprocessing_fn wydaje się być niedeterministyczna.

W TF 2.x preprocessing_fn dostarczony przez użytkownika jest śledzony kilka razy. Jeśli kolejność napotykanych analizatorów TFT zmienia się przy każdym śladzie, ten błąd zostanie zgłoszony. Można to naprawić, usuwając wszelki niedeterminizm w kolejności wywoływania analizatorów TFT.

Dane wyjściowe transform_raw_features nie zawierają oczekiwanej funkcji.

Przykładowe wyjątki:

KeyError: \<feature key>

Lub

\<feature key> not found in features dictionary.

TFTransformOutput.transform_raw_features ignoruje parametr drop_unused_features i zachowuje się tak, jakby był prawdziwy. Zaktualizuj wszelkie zastosowania słownika wyjściowego z tego interfejsu API, aby sprawdzić, czy istnieje w nim klucz, który próbujesz pobrać.

tf.estimator.BaselineClassifier widzi błąd „Nie zainicjowano tabeli”.

Przykładowy wyjątek:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Table not initialized.

Najlepszym rozwiązaniem jest wsparcie dla Trainera z executorem opartym na estymatorze. Chociaż inne estymatory działają, zaobserwowaliśmy problemy z inicjowaniem tabeli w klasie BaselineClassifier. Proszę wyłączyć TF 2.x w tf.Transform .

Znane problemy/funkcje nie są jeszcze obsługiwane

Wyprowadzanie słowników w formacie TFRecord nie jest jeszcze obsługiwane.

tfrecord_gzip nie jest jeszcze obsługiwany jako poprawna wartość parametru file_format w tft.vocabulary (i innych interfejsach API słownika).

Zachowanie starszego zachowania tf.Transform

Jeśli potok tf.Transform nie powinien działać z TF 2.x, możesz zachować starsze zachowanie na jeden z następujących sposobów: