باستخدام 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، قد تتم مواجهة المشكلات التالية:

خطأ في وقت التشغيل: يبدو أن ترتيب المحللين في 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 ويتصرف كما لو كان صحيحًا. يرجى تحديث أي استخدامات لقاموس الإخراج من واجهة برمجة التطبيقات هذه للتحقق مما إذا كان المفتاح الذي تحاول استرداده موجودًا فيه.

يرى tf.estimator.BaselineClassifier خطأ عدم تهيئة الجدول.

استثناء المثال:

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

يعد دعم المدرب مع المنفذ القائم على المقدر هو أفضل جهد. بينما يعمل المقدرون الآخرون، فقد رأينا مشكلات تتعلق بتهيئة الجدول في BaselineClassifier. الرجاء تعطيل TF 2.x في tf.Transform .

المشكلات / الميزات المعروفة غير مدعومة بعد

إن إخراج المفردات بتنسيق TFRecord غير مدعوم بعد.

tfrecord_gzip غير مدعوم حتى الآن كقيمة صالحة لمعلمة file_format في tft.vocabulary (وواجهات برمجة تطبيقات المفردات الأخرى).

الاحتفاظ بسلوك tf القديم. التحويل

إذا لم يكن من المفترض تشغيل مسار tf.Transform مع TF 2.x، فيمكنك الاحتفاظ بالسلوك القديم بإحدى الطرق التالية:

  • قم بتعطيل TF2 في tf.Transform عن طريق الاتصال بـ tf.compat.v1.disable_v2_behavior()
  • تمرير force_tf_compat_v1=True إلى tft_beam.Context في حالة استخدام tf.Transform كمكتبة مستقلة أو إلى مكون التحويل في TFX.
,

بدءًا من الإصدار 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، قد تتم مواجهة المشكلات التالية:

خطأ في وقت التشغيل: يبدو أن ترتيب المحللين في 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 ويتصرف كما لو كان صحيحًا. يرجى تحديث أي استخدامات لقاموس الإخراج من واجهة برمجة التطبيقات هذه للتحقق مما إذا كان المفتاح الذي تحاول استرداده موجودًا فيه.

يرى tf.estimator.BaselineClassifier خطأ عدم تهيئة الجدول.

استثناء المثال:

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

يعد دعم المدرب مع المنفذ القائم على المقدر هو أفضل جهد. بينما يعمل المقدرون الآخرون، فقد رأينا مشكلات تتعلق بتهيئة الجدول في BaselineClassifier. الرجاء تعطيل TF 2.x في tf.Transform .

المشكلات / الميزات المعروفة غير مدعومة بعد

إن إخراج المفردات بتنسيق TFRecord غير مدعوم بعد.

tfrecord_gzip غير مدعوم حتى الآن كقيمة صالحة لمعلمة file_format في tft.vocabulary (وواجهات برمجة تطبيقات المفردات الأخرى).

الاحتفاظ بسلوك tf القديم. التحويل

إذا لم يكن من المفترض تشغيل مسار tf.Transform مع TF 2.x، فيمكنك الاحتفاظ بالسلوك القديم بإحدى الطرق التالية:

  • قم بتعطيل TF2 في tf.Transform عن طريق الاتصال بـ tf.compat.v1.disable_v2_behavior()
  • تمرير force_tf_compat_v1=True إلى tft_beam.Context في حالة استخدام tf.Transform كمكتبة مستقلة أو إلى مكون التحويل في TFX.