استفاده از tf.Transform با TensorFlow 2.x

با انتشار 0.30 tf.Transform ، رفتار پیش‌فرض صادر کردن یک TF 2.x SavedModel است، مگر اینکه رفتارهای TF 2.x به صراحت غیرفعال شده باشند. این صفحه راهنمایی برای استفاده از tf.Transform برای صادر کردن نمودار تبدیل به عنوان TensorFlow 2.x SavedModel ارائه می دهد.

جدید در tf.Transform با TF 2.x

بارگیری مدل‌های Keras در preprocessing_fn

لطفاً از 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 در tf.Transform کار می‌کنند. تنها زمانی که preprocessing_fn ردیابی شده و به‌عنوان یک TF 2.x SavedModel صادر می‌شود، کار می‌کنند (این رفتار پیش‌فرض است که با 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 خطای Table Not Initialized را می بیند.

مثال استثنا:

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

پشتیبانی از ترینر با مجری مبتنی بر برآوردگر بهترین تلاش است. در حالی که برآوردگرهای دیگر کار می کنند، ما مشکلاتی را در مورد مقداردهی اولیه جدول در BaselineClassifier دیده ایم. لطفاً TF 2.x را در tf.Transform غیرفعال کنید .

مسائل شناخته شده / ویژگی هایی که هنوز پشتیبانی نمی شوند

خروجی واژگان در قالب TFRecord هنوز پشتیبانی نمی شود.

tfrecord_gzip هنوز به عنوان یک مقدار معتبر برای پارامتر file_format در tft.vocabulary (و سایر APIهای واژگان) پشتیبانی نمی شود.

حفظ tf میراث. رفتار را تغییر دهید

اگر خط لوله tf.Transform شما نباید با TF 2.x اجرا شود، می‌توانید رفتار قدیمی را به یکی از روش‌های زیر حفظ کنید:

  • غیرفعال کردن TF2 در tf.Transform با فراخوانی tf.compat.v1.disable_v2_behavior()
  • عبور force_tf_compat_v1=True در صورت استفاده از tf.Transform به عنوان یک کتابخانه مستقل یا به جزء Transform در TFX، با tft_beam.Context درست است.