نشكرك على متابعة Google I / O. عرض جميع الجلسات عند الطلب مشاهدة عند الطلب

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

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

بالنسبة إلى hub.Module ، تحول TF Hub بعيدًا عن tf.compat.v1.Graph tf.contrib.v1.layers . بدلاً من ذلك ، يوجد الآن hub.KerasLayer للاستخدام جنبًا إلى جنب مع طبقات Keras الأخرى لبناء نموذج tf.keras.Model (عادةً في بيئة التنفيذ الحثيث الجديدة لـ TF2) وطريقة 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() وتتكيف مع النتيجة للاستخدام في Keras جنبًا إلى جنب مع طبقات Keras الأخرى. (قد يكون غلافًا مناسبًا للنماذج SavedModels المحملة والمستخدمة بطرق أخرى.)

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

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

استخدام API الجديد في التدريب المقدر

إذا كنت تستخدم TF2 SavedModel في مقدر للتدريب مع خوادم المعلمات (أو في جلسة TF1 مع المتغيرات الموضوعة على الأجهزة البعيدة) ، فأنت بحاجة إلى تعيين experimental.share_cluster_devices_in_session . مثل "Assigned device '/ job: ps / replica: 0 / task: 0 / device: CPU: 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)

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

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

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

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

بالإضافة إلى ذلك ، يعرض KerasLayer القدرة على تحديد tags ، signature ، output_key ، signature_outputs_as_dict للحصول على استخدامات أكثر تحديدًا للنماذج القديمة بتنسيق TF1 Hub ونماذج 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).