ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

الترحيل من TF1 إلى TF2 باستخدام TensorFlow Hub

تشرح هذه الصفحة كيفية الاستمرار في استخدام TensorFlow Hub أثناء ترحيل رمز TensorFlow الخاص بك من TensorFlow 1 إلى TensorFlow 2. وهي تكمل دليل الترحيل العام لـ TensorFlow.

بالنسبة إلى TF2 ، تحول TF Hub بعيدًا عن hub.Module القديم hub.Module API لإنشاء tf.compat.v1.Graph مثل tf.contrib.v1.layers . بدلاً من ذلك ، يوجد الآن hub.KerasLayer للاستخدام جنبًا إلى جنب مع طبقات Keras الأخرى لبناء tf.keras.Model (عادةً في بيئة التنفيذ الجديدة الحريصة لـ TF2 hub.load() وطريقة hub.load() الأساسية hub.load() الخاصة برمز TensorFlow منخفض المستوى.

تظل hub.Module API متاحة في مكتبة tensorflow_hub للاستخدام في TF1 وفي وضع التوافق TF1 لـ TF2. يمكن فقط تحميل النماذج بتنسيق TF1 Hub .

تعمل واجهة برمجة التطبيقات الجديدة لـ hub.load() و hub.KerasLayer على TensorFlow 1.15 (في وضع حريص ورسم بياني) وفي TensorFlow 2. يمكن لواجهة برمجة التطبيقات الجديدة تحميل أصول TF2 SavedModel الجديدة ، ومع القيود المنصوص عليها في النموذج دليل التوافق ، النماذج القديمة بتنسيق TF1 Hub.

بشكل عام ، يوصى باستخدام واجهة برمجة تطبيقات جديدة حيثما أمكن ذلك.

ملخص API الجديد

hub.load() هي الوظيفة الجديدة ذات المستوى المنخفض لتحميل SavedModel من TensorFlow Hub (أو الخدمات المتوافقة). يلتف tf.saved_model.load() في TF2 ؛ يصف دليل SavedModel الخاص بـ TensorFlow ما يمكنك فعله بالنتيجة.

 m = hub.load(handle)
outputs = m(inputs)
 

فئة hub.KerasLayer تستدعي hub.load() وتقوم hub.load() النتيجة للاستخدام في Keras إلى جانب طبقات Keras الأخرى. (قد يكون غلافًا مناسبًا لـ SavedModels المحمل المستخدم بطرق أخرى.)

 model = tf.keras.Sequential([
    hub.KerasLayer(handle),
    ...])
 

تعرض العديد من البرامج التعليمية واجهات برمجة التطبيقات هذه في العمل. انظر على وجه الخصوص

استخدام واجهة برمجة التطبيقات الجديدة في تدريب المُقدِّر

إذا كنت تستخدم TF2 SavedModel في المُقدِّر للتدريب مع خوادم المعلمات (أو خلاف ذلك في جلسة TF1 مع المتغيرات الموضوعة على الأجهزة البعيدة) ، فأنت بحاجة إلى تعيين experimental.share_cluster_devices_in_session share_cluster_devices_in_session في tf. مثل "الجهاز المعين / المهمة: ps / نسخة متماثلة: 0 / المهمة: 0 / الجهاز: وحدة المعالجة المركزية: 0" لا تتطابق مع أي جهاز. "

يمكن تعيين الخيار الضروري مثل

 session_config = tf.compat.v1.ConfigProto()
session_config.experimental.share_cluster_devices_in_session = True
run_config = tf.estimator.RunConfig(..., session_config=session_config)
estimator = tf.estimator.Estimator(..., config=run_config)
 

بدءًا من TF2.2 ، لم يعد هذا الخيار تجريبيًا ، ويمكن إسقاط القطعة .experimental .

تحميل النماذج القديمة بتنسيق TF1 Hub

يمكن أن يحدث أن TF2 SavedModel الجديد غير متاح حتى الآن لحالة الاستخدام الخاصة بك وتحتاج إلى تحميل نموذج قديم بتنسيق TF1 Hub. بدءًا من الإصدار tensorflow_hub 0.7 ، يمكنك استخدام النموذج القديم بتنسيق TF1 Hub مع hub.KerasLayer كما هو موضح أدناه:

 m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
 

بالإضافة إلى ذلك KerasLayer يعرض القدرة على تحديد tags ، signature ، output_key و signature_outputs_as_dict لمزيد من الاستخدامات المحددة من نماذج التراث في TF1 محور تنسيق وإرث SavedModels.

لمزيد من المعلومات حول التوافق مع تنسيق TF1 Hub ، راجع دليل توافق الطراز .

استخدام واجهات برمجة التطبيقات ذات المستوى الأدنى

يمكن تحميل النماذج القديمة بتنسيق TF1 Hub عبر tf.saved_model.load . بدلا من

 # DEPRECATED: TensorFlow 1
m = hub.Module(handle, tags={"foo", "bar"})
tensors_out_dict = m(dict(x1=..., x2=...), signature="sig", as_dict=True)
 

يوصى باستخدام:

 # TensorFlow 2
m = hub.load(path, tags={"foo", "bar"})
tensors_out_dict = m.signatures["sig"](x1=..., x2=...)
 

في هذه الأمثلة ، m.signatures عبارة عن إملاء على وظائف TensorFlow الملموسة التي تحمل أسماء التوقيع. استدعاء مثل هذه الوظيفة يحسب جميع مخرجاتها ، حتى لو كانت غير مستخدمة. (هذا يختلف عن التقييم البطيء لوضع الرسم البياني لـ TF1.)