TensorFlow 2.x에서 tf.Transform 사용하기

tf.Transform 0.30 릴리스부터 기본 동작은 TF 2.x 동작이 명시적으로 비활성화되지 않는 한 TF 2.x SavedModel을 내보내는 것입니다. 이 페이지에서는 tf.Transform 사용하여 변환 그래프를 TensorFlow 2.x SavedModel로 내보내는 방법에 대한 가이드를 제공합니다.

TF 2.x를 사용한 tf.Transform의 새로운 기능

preprocessing_fn 내에서 Keras 모델 로드

아래 예와 같이 tft.make_and_track_object API를 사용하여 Keras 모델을 로드하세요.

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

TF 2.x tf.hub 모듈 사용

TF 2.x 허브 모듈은 preprocessing_fn 이 추적되어 TF 2.x SavedModel로 내보내지는 경우에만 tf.Transform 에서 작동합니다(이는 tensorflow_transform 0.30 부터 시작하는 기본 동작입니다). 아래 예와 같이 tft.make_and_track_object API를 사용하여 tf.hub 모듈을 로드하세요.

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

잠재적인 마이그레이션 문제

기존 tf.Transform 파이프라인을 TF 1.x에서 TF 2.x로 마이그레이션하는 경우 다음 문제가 발생할 수 있습니다.

RuntimeError: preprocessing_fn 의 분석기 순서가 비결정적인 것 같습니다.

TF 2.x에서는 사용자가 제공한 preprocessing_fn 여러 번 추적됩니다. TFT 분석기가 발견되는 순서가 각 트레이스마다 변경되면 이 오류가 발생합니다. 이는 TFT 분석기가 호출되는 순서대로 비결정성을 제거하여 해결할 수 있습니다.

transform_raw_features 의 출력에 예상되는 기능이 포함되어 있지 않습니다.

예외 예:

KeyError: \<feature key

또는

\<feature key> not found in features dictionary.

TFTransformOutput.transform_raw_features drop_unused_features 매개변수를 무시하고 True인 것처럼 동작합니다. 검색하려는 키가 존재하는지 확인하려면 이 API에서 출력 사전의 사용법을 업데이트하세요.

tf.estimator.BaselineClassifier는 테이블이 초기화되지 않음 오류를 확인합니다.

예외 예:

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

Estimator 기반 실행기를 통한 Trainer 지원은 최선의 노력을 다합니다. 다른 추정기가 작동하는 동안 BaselineClassifier의 테이블 초기화에 문제가 있는 것을 확인했습니다. tf.Transform 에서 TF 2.x를 비활성화 하세요.

알려진 문제/아직 지원되지 않는 기능

TFRecord 형식의 어휘 출력은 아직 지원되지 않습니다.

tfrecord_gzip 아직 tft.vocabulary (및 기타 어휘 API)의 file_format 매개변수에 대한 유효한 값으로 지원되지 않습니다.

레거시 tf.Transform 동작 유지

tf.Transform 파이프라인을 TF 2.x로 실행해서는 안 되는 경우 다음 방법 중 하나로 레거시 동작을 유지할 수 있습니다.

  • tf.compat.v1.disable_v2_behavior() 호출하여 tf.Transform 에서 TF2를 비활성화합니다.
  • tf.Transform 독립 실행형 라이브러리로 사용하거나 TFX의 Transform 구성 요소에 사용하는 경우 force_tf_compat_v1=True tft_beam.Context 에 전달합니다.