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 에 전달합니다.
,

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 에 전달합니다.