تشرح هذه الصفحة كيفية الاستمرار في استخدام 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).