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:
- Wyłącz TF2 w
tf.Transform
, wywołująctf.compat.v1.disable_v2_behavior()
- Przekazywanie
force_tf_compat_v1=True
dotft_beam.Context
jeśli używasztf.Transform
jako samodzielnej biblioteki lub do komponentu Transform w TFX.