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

SavedModels قابلة لإعادة الاستخدام ، و SavedModels قابلة لإعادة الاستخدام

مقدمة

يستضيف TensorFlow Hub SavedModels لـ TensorFlow 2 ، من بين الأصول الأخرى. يمكن إعادة تحميلها في برنامج Python باستخدام obj = hub.load(url) [ معرفة المزيد ]. الكائن الذي تم إرجاعه هو نتيجة obj tf.saved_model.load() (راجع دليل SavedModel الخاص بـ TensorFlow). يمكن أن يكون لهذا الكائن سمات عشوائية هي وظائف tf ، ومتغيرات tf (تمت تهيئتها من قيمها المُدربة مسبقًا) ، وموارد أخرى ، وبشكل متكرر ، المزيد من هذه الكائنات.

تصف هذه الصفحة واجهة يتم تنفيذها بواسطة الكائن المحمّل من أجل إعادة استخدامها في برنامج obj Python. يُطلق على SavedModels المتوافقة مع هذه الواجهة اسم SavedModels القابل لإعادة الاستخدام .

إعادة الاستخدام تعني بناء نموذج أكبر حول obj ، بما في ذلك القدرة على ضبطه. يعني الضبط الدقيق مزيدًا من التدريب للأوزان في obj كجزء من النموذج المحيط. يتم تحديد وظيفة الخسارة والمحسِّن من خلال النموذج المحيط ؛ يحدد obj فقط تعيين المدخلات إلى عمليات التنشيط الإخراج ("التمرير الأمامي") ، بما في ذلك ربما تقنيات مثل التسرب أو تسوية الدُفعة.

يوصي فريق TensorFlow Hub بتطبيق واجهة SavedModel القابلة لإعادة الاستخدام في جميع نماذج SavedModels التي يُراد إعادة استخدامها بالمعنى الوارد أعلاه. تتطلب العديد من الأدوات المساعدة من مكتبة tensorflow_hub ، ولا سيما hub.KerasLayer ، SavedModels لتنفيذه.

العلاقة مع SignatureDefs

هذه الواجهة من حيث وظائف tf وميزات TF2 الأخرى منفصلة عن توقيعات SavedModel ، والتي كانت متاحة منذ TF1 ولا تزال تُستخدم في TF2 للاستدلال (مثل نشر SavedModels إلى TF Serving أو TF Lite). التوقيعات للاستدلال ليست معبرة بما يكفي لدعم الضبط الدقيق ، وتوفر tf.function واجهة برمجة تطبيقات Python أكثر طبيعية وتعبيرية للنموذج المعاد استخدامه.

علاقتها بمكتبات بناء النماذج

يستخدم نموذج SavedModel القابل لإعادة الاستخدام عناصر TensorFlow 2 الأولية فقط ، بغض النظر عن أي مكتبة خاصة ببناء النماذج مثل Keras أو Sonnet. هذا يسهل إعادة الاستخدام عبر مكتبات بناء النماذج ، خالية من التبعيات على كود بناء النموذج الأصلي.

ستكون هناك حاجة إلى قدر من التكيف لتحميل النماذج المحفوظة القابلة لإعادة الاستخدام أو حفظها من أي مكتبة بناء نموذج معينة. بالنسبة إلى Keras ، يوفر hub.KerasLayer التحميل ، وتم إعادة تصميم الحفظ المدمج في Keras بتنسيق SavedModel من أجل TF2 بهدف توفير مجموعة شاملة من هذه الواجهة (راجع RFC من مايو 2019).

العلاقة بـ "Common SavedModel APIs" الخاصة بالمهمة

يسمح تعريف الواجهة في هذه الصفحة بأي عدد ونوع من المدخلات والمخرجات. تعمل واجهات برمجة التطبيقات الشائعة SavedModel لـ TF Hub على تحسين هذه الواجهة العامة باستخدام اصطلاحات الاستخدام لمهام محددة لجعل النماذج قابلة للتبديل بسهولة.

تعريف الواجهة

صفات

نموذج SavedModel القابل لإعادة الاستخدام هو TensorFlow 2 SavedModel بحيث يقوم obj = tf.saved_model.load(...) بإرجاع كائن له السمات التالية

  • __call__ . مطلوب. دالة tf التي تنفذ حساب النموذج ("المرور الأمامي") تخضع للمواصفات أدناه.

  • variables : قائمة بكائنات tf المتغيرة ، تسرد جميع المتغيرات المستخدمة من قبل أي استدعاء محتمل لـ __call__ ، بما في ذلك كل من المتغيرات القابلة للتدريب وغير القابلة للتدريب.

    يمكن حذف هذه القائمة إذا كانت فارغة.

  • trainable_variables : قائمة بالكائنات المتغيرة tf مثل أن v.trainable يكون صحيحًا لجميع العناصر. يجب أن تكون هذه المتغيرات مجموعة فرعية من variables . هذه هي المتغيرات التي يجب تدريبها عند ضبط الكائن. قد يختار منشئ SavedModel حذف بعض المتغيرات التي كانت قابلة للتدريب في الأصل للإشارة إلى أنه لا ينبغي تعديلها أثناء الضبط الدقيق.

    يمكن حذف هذه القائمة إذا كانت فارغة ، على وجه الخصوص ، إذا كان SavedModel لا يدعم الضبط الدقيق.

  • regularization_losses : قائمة بوظائف tf ، كل منها يأخذ صفر مدخلات ويعيد موتر عوامة مفردة. من أجل الضبط الدقيق ، يُنصح مستخدم SavedModel بتضمين هذه المصطلحات كشروط تنظيم إضافية في الخسارة (في أبسط الحالات دون مزيد من التحجيم). عادة ، يتم استخدام هذه لتمثيل منظمي الوزن. (بسبب نقص المدخلات ، لا يمكن لدوال tf التعبير عن منظمي النشاط.)

    يمكن حذف هذه القائمة إذا كانت فارغة ، على وجه الخصوص ، إذا كان SavedModel لا يدعم الضبط الدقيق أو لا يرغب في وصف تنظيم الوزن.

وظيفة __call__

يحتوي كائن SavedModel المستعاد على سمة obj obj.__call__ وهي وظيفة tf تمت استعادتها وتسمح باستدعاء obj على النحو التالي.

ملخص (كود زائف):

outputs = obj(inputs, trainable=..., **kwargs)

الحجج

الحجج على النحو التالي.

  • هناك وسيطة موضعية واحدة مطلوبة مع مجموعة من عمليات تنشيط الإدخال في SavedModel. نوعه هو واحد من

    • موتر واحد لمدخل واحد ،
    • قائمة Tensors لتسلسل مرتب من المدخلات غير المسماة ،
    • ديكت من Tensors مرتبطا بمجموعة معينة من أسماء المدخلات.

    (قد تسمح المراجعات المستقبلية لهذه الواجهة بإجراء أعشاش أكثر عمومية.) يختار منشئ SavedModel أحد هذه الأشكال وأنواع الموتر. عندما يكون ذلك مفيدًا ، يجب أن تكون بعض أبعاد الشكل غير محددة (لا سيما حجم الدُفعة).

  • قد يكون هناك training اختياري على استخدام الكلمات الأساسية والذي يقبل لغة بايثون المنطقية ، سواء كانت True أم False . الافتراضي هو False . إذا كان النموذج يدعم الضبط الدقيق ، وإذا اختلف حسابه بين الاثنين (على سبيل المثال ، كما هو الحال في التسرب وتطبيع الدُفعة) ، يتم تنفيذ هذا التمييز باستخدام هذه الوسيطة. خلاف ذلك ، قد تكون هذه الحجة غائبة.

    ليس مطلوبًا أن __call__ بقبول حجة training ذات قيمة Tensor. يقع على عاتق المتصل استخدام tf.cond() إذا لزم الأمر للإرسال بينهما.

  • قد يختار منشئ SavedModel قبول المزيد من kwargs الاختيارية لأسماء معينة.

    • بالنسبة للحجج ذات القيمة Tensor ، يحدد منشئ SavedModel الأنواع والأشكال المسموح بها. تقبل tf.function قيمة افتراضية لبيثون على وسيطة يتم تتبعها باستخدام إدخال tf.TensorSpec. يمكن استخدام هذه الوسيطات للسماح بتخصيص المعلمات الفوقية الرقمية المتضمنة في __call__ (على سبيل المثال ، معدل التسرب).

    • بالنسبة للحجج ذات القيمة Python ، يحدد منشئ SavedModel القيم المسموح بها. يمكن استخدام مثل هذه الحجج كأعلام لاتخاذ خيارات منفصلة في وظيفة التتبع (لكن ضع في اعتبارك الانفجار الاندماجي للآثار).

يجب أن توفر وظيفة __call__ المستعادة تتبعات لجميع مجموعات الوسائط المسموح بها. يجب ألا يغير False training بين True والخطأ من جواز الحجج.

نتيجة

يمكن أن تكون outputs استدعاء obj

  • موتر واحد لمخرج واحد ،
  • قائمة Tensors لتسلسل مرتب من المخرجات غير المسماة ،
  • ديكت من Tensors مرتبطا بمجموعة معينة من أسماء الإخراج.

(قد تسمح المراجعات المستقبلية لهذه الواجهة بإجراء أعشاش أكثر عمومية.) قد يختلف نوع الإرجاع اعتمادًا على kwargs المقيمة في Python. هذا يسمح للأعلام التي تنتج مخرجات إضافية. يحدد منشئ SavedModel أنواع وأشكال الإخراج واعتمادها على المدخلات.

الأسماء التي يمكن استدعائها

يمكن أن يوفر نموذج SavedModel القابل لإعادة الاستخدام عدة قطع نموذج بالطريقة الموضحة أعلاه عن طريق وضعها في كائنات فرعية مسماة ، على سبيل المثال ، obj.foo و obj.bar وما إلى ذلك. يوفر كل كائن فرعي طريقة __call__ والسمات الداعمة حول المتغيرات وما إلى ذلك الخاصة بقطعة النموذج هذه. للمثال أعلاه ، سيكون هناك obj.foo.__call__ ، obj.foo.variables وما إلى ذلك.

لاحظ أن هذه الواجهة لا تغطي طريقة إضافة دالة tf مباشرة مثل tf.foo .

من المتوقع أن يتعامل مستخدمو SavedModels القابلة لإعادة الاستخدام مع مستوى واحد فقط من التداخل ( obj.bar ولكن ليس obj.bar.baz ). (قد تسمح المراجعات المستقبلية لهذه الواجهة بتداخل أعمق ، وقد تتنازل عن شرط أن يكون كائن المستوى الأعلى قابلاً للاستدعاء نفسه.)

ملاحظات ختامية

العلاقة مع واجهات برمجة التطبيقات قيد المعالجة

يصف هذا المستند واجهة لفئة Python التي تتكون من العناصر الأولية مثل tf.function و tf.Variable التي تنجو من رحلة ذهابًا وإيابًا من خلال التسلسل عبر tf.saved_model.save() و tf.saved_model.load() . ومع ذلك ، كانت الواجهة موجودة بالفعل على الكائن الأصلي الذي تم تمريره إلى tf.saved_model.save() . يتيح التكيف مع تلك الواجهة تبادل قطع النموذج عبر واجهات برمجة التطبيقات الخاصة ببناء النماذج ضمن برنامج TensorFlow واحد.