يمكنك قراءة المزيد حول هذا التنسيق بتنسيق TF1 Hub
ملاحظة التوافق
تنسيق TF1 Hub موجه نحو TensorFlow 1. وهو مدعوم جزئيًا فقط بواسطة TF Hub في TensorFlow 2. يرجى التفكير في النشر بتنسيق TF2 SavedModel الجديد بدلاً من ذلك باتباع دليل تصدير النموذج .
يتشابه تنسيق TF1 Hub مع تنسيق SavedModel الخاص بـ TensorFlow 1 على مستوى نحوي (نفس أسماء الملفات ورسائل البروتوكول) ولكنه يختلف معنويًا للسماح بإعادة استخدام الوحدة النمطية وتكوينها وإعادة تدريبها (على سبيل المثال ، تخزين مختلف لمُهيئ الموارد ، ووضع علامات مختلفة اتفاقيات للفقرات). أسهل طريقة للتمييز بينها على القرص هي وجود أو عدم وجود ملف tfhub_module.pb
.
النهج العام
لتعريف وحدة نمطية جديدة ، يستدعي الناشر hub.create_module_spec()
بوظيفة module_fn
. تنشئ هذه الوظيفة رسمًا بيانيًا يمثل الهيكل الداخلي للوحدة ، باستخدام tf.placeholder()
للمدخلات التي سيقدمها المتصل. ثم يقوم بتعريف التوقيعات عن طريق استدعاء hub.add_signature(name, inputs, outputs)
مرة واحدة أو أكثر.
فمثلا:
def module_fn():
inputs = tf.placeholder(dtype=tf.float32, shape=[None, 50])
layer1 = tf.layers.dense(inputs, 200)
layer2 = tf.layers.dense(layer1, 100)
outputs = dict(default=layer2, hidden_activations=layer1)
# Add default signature.
hub.add_signature(inputs=inputs, outputs=outputs)
...
spec = hub.create_module_spec(module_fn)
يمكن استخدام نتيجة hub.create_module_spec()
، بدلاً من المسار ، لإنشاء كائن وحدة نمطية داخل رسم بياني TensorFlow معين. في مثل هذه الحالة ، لا توجد نقطة تحقق ، وسيستخدم مثيل الوحدة النمطية المتغيرات المبدئية بدلاً من ذلك.
يمكن إجراء تسلسل لأي مثيل وحدة نمطية إلى القرص عبر طريقة export(path, session)
. يؤدي تصدير وحدة نمطية إلى إجراء تسلسل لتعريفها مع الحالة الحالية لمتغيراتها في session
إلى المسار الذي تم تمريره. يمكن استخدام هذا عند تصدير وحدة نمطية لأول مرة ، وكذلك عند تصدير وحدة مضبوطة بدقة.
للتوافق مع TensorFlow Estimator ، hub.LatestModuleExporter
بتصدير الوحدات النمطية من أحدث نقطة فحص ، تمامًا مثل tf.estimator.LatestExporter
بتصدير النموذج بأكمله من أحدث نقطة فحص.
يجب على ناشري الوحدات النمطية تنفيذ توقيع مشترك عندما يكون ذلك ممكنًا ، بحيث يمكن للمستهلكين تبادل الوحدات بسهولة والعثور على أفضل ما يناسب مشكلتهم.
مثال حقيقي
ألق نظرة على مصدر وحدة تضمين النص لدينا للحصول على مثال حقيقي لكيفية إنشاء وحدة من تنسيق تضمين نص شائع.
نصيحة للناشرين
لتسهيل الضبط الدقيق على المستهلكين ، يُرجى مراعاة ما يلي:
يحتاج الضبط إلى تسوية. يتم تصدير الوحدة النمطية الخاصة بك مع مجموعة
REGULARIZATION_LOSSES
، وهو ما يضع اختيارك لـtf.layers.dense(..., kernel_regularizer=...)
tf.losses.get_regularization_losses()
تفضل هذه الطريقة لتعريف خسائر تسوية L1 / L2.في نموذج الناشر ، تجنب تحديد تسوية L1 / L2 عبر معلمات
l1_
وl2_regularization_strength
لـtf.train.FtrlOptimizer
وtf.train.ProximalGradientDescentOptimizer
أخرى قريبة. لا يتم تصديرها جنبًا إلى جنب مع الوحدة ، وقد لا يكون تحديد نقاط القوة على المستوى العالمي مناسبًا للمستهلك. باستثناء تنظيم L1 في النماذج العريضة (أي الخطية المتفرقة) أو النماذج الواسعة والعميقة ، ينبغي أن يكون من الممكن استخدام خسائر التنظيم الفردية بدلاً من ذلك.إذا كنت تستخدم التسرب ، أو تسوية الدُفعات ، أو تقنيات تدريب مشابهة ، فقم بتعيين معلماتها الفائقة على قيم منطقية عبر العديد من الاستخدامات المتوقعة. قد يتعين تعديل معدل التسرب وفقًا لميل المشكلة المستهدفة إلى التجهيز الزائد. في تسوية الدفعات ، يجب أن يكون الزخم (المعروف أيضًا باسم معامل الانحلال) صغيرًا بما يكفي لتمكين الضبط الدقيق لمجموعات البيانات الصغيرة و / أو الدفعات الكبيرة. للمستهلكين المتقدمين ، ضع في اعتبارك إضافة توقيع يكشف التحكم في معلمات التشعب الحرجة.