يأتي TensorFlow.js مزودًا بمجموعة متنوعة من النماذج المدربة مسبقًا والجاهزة للاستخدام في المتصفح - ويمكن العثور عليها في مستودع النماذج الخاص بنا. ومع ذلك، ربما تكون قد عثرت على نموذج TensorFlow أو قمت بتأليفه في مكان آخر وترغب في استخدامه في تطبيق الويب الخاص بك. يوفر TensorFlow.js محول نموذج لهذا الغرض. يحتوي محول TensorFlow.js على مكونين:
- أداة مساعدة لسطر الأوامر تقوم بتحويل نماذج Keras وTensorFlow لاستخدامها في TensorFlow.js.
- واجهة برمجة تطبيقات لتحميل النموذج وتنفيذه في المتصفح باستخدام TensorFlow.js.
تحويل النموذج الخاص بك
يعمل محول TensorFlow.js مع العديد من تنسيقات النماذج المختلفة:
SavedModel : هذا هو التنسيق الافتراضي الذي يتم به حفظ نماذج TensorFlow. تم توثيق تنسيق SavedModel هنا .
نموذج Keras : يتم حفظ نماذج Keras بشكل عام كملف HDF5. يمكن العثور على مزيد من المعلومات حول حفظ نماذج Keras هنا .
وحدة TensorFlow Hub : هذه هي النماذج التي تم تجميعها للتوزيع على TensorFlow Hub، وهي منصة لمشاركة النماذج واكتشافها. يمكن العثور على المكتبة النموذجية هنا .
اعتمادًا على نوع النموذج الذي تحاول تحويله، ستحتاج إلى تمرير وسائط مختلفة إلى المحول. على سبيل المثال، لنفترض أنك قمت بحفظ نموذج Keras المسمى model.h5
في دليل tmp/
الخاص بك. لتحويل النموذج الخاص بك باستخدام محول TensorFlow.js، يمكنك تشغيل الأمر التالي:
$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model
سيؤدي هذا إلى تحويل النموذج في /tmp/model.h5
وإخراج ملف model.json
مع ملفات الوزن الثنائية إلى دليل tmp/tfjs_model/
.
يمكن العثور على مزيد من التفاصيل حول وسيطات سطر الأوامر المطابقة لتنسيقات النماذج المختلفة في الملف README الخاص بمحول TensorFlow.js.
أثناء عملية التحويل، نقوم باجتياز الرسم البياني للنموذج والتحقق من أن كل عملية مدعومة بواسطة TensorFlow.js. إذا كان الأمر كذلك، فإننا نكتب الرسم البياني بتنسيق يمكن للمتصفح استخدامه. نحاول تحسين النموذج ليتم عرضه على الويب من خلال تقسيم الأوزان إلى ملفات بحجم 4 ميجابايت - وبهذه الطريقة يمكن تخزينها مؤقتًا بواسطة المتصفحات. نحاول أيضًا تبسيط الرسم البياني النموذجي نفسه باستخدام مشروع Grappler مفتوح المصدر. تتضمن تبسيطات الرسم البياني طي العمليات المتجاورة معًا، وإزالة الرسوم البيانية الفرعية المشتركة، وما إلى ذلك. وليس لهذه التغييرات أي تأثير على مخرجات النموذج. لمزيد من التحسين، يمكن للمستخدمين تمرير وسيطة ترشد المحول إلى تكميم النموذج إلى حجم بايت معين. التكميم هو أسلوب لتقليل حجم النموذج من خلال تمثيل الأوزان بعدد أقل من البتات. يجب على المستخدمين توخي الحذر للتأكد من أن نموذجهم يحافظ على درجة مقبولة من الدقة بعد التكميم.
إذا واجهنا عملية غير مدعومة أثناء التحويل، فستفشل العملية ونقوم بطباعة اسم العملية للمستخدم. لا تتردد في إرسال مشكلة على GitHub لإعلامنا بها - فنحن نحاول تنفيذ عمليات جديدة استجابة لطلب المستخدم.
أفضل الممارسات
على الرغم من أننا نبذل قصارى جهدنا لتحسين نموذجك أثناء التحويل، فغالبًا ما تكون أفضل طريقة لضمان أداء نموذجك جيدًا هي بنائه مع وضع البيئات المحدودة الموارد في الاعتبار. وهذا يعني تجنب البنى المعقدة للغاية وتقليل عدد المعلمات (الأوزان) عندما يكون ذلك ممكنًا.
قم بتشغيل النموذج الخاص بك
عند تحويل النموذج الخاص بك بنجاح، سينتهي بك الأمر بمجموعة من ملفات الوزن وملف هيكل النموذج. يوفر TensorFlow.js واجهات برمجة التطبيقات لتحميل النماذج التي يمكنك استخدامها لجلب أصول النماذج هذه وتشغيل الاستدلال في المتصفح.
إليك ما تبدو عليه واجهة برمجة التطبيقات لوحدة TensorFlow SavedModel أو TensorFlow Hub المحولة:
const model = await tf.loadGraphModel(‘path/to/model.json’);
وإليك ما يبدو عليه نموذج Keras المحول:
const model = await tf.loadLayersModel(‘path/to/model.json’);
تقوم واجهة برمجة التطبيقات tf.loadGraphModel
بإرجاع tf.FrozenModel
، مما يعني أن المعلمات ثابتة ولن تتمكن من ضبط النموذج الخاص بك باستخدام البيانات الجديدة. تقوم واجهة برمجة التطبيقات tf.loadLayersModel
بإرجاع tf.Model، والذي يمكن تدريبه. للحصول على معلومات حول كيفية تدريب نموذج tf، راجع دليل نماذج القطار .
بعد التحويل، من الجيد تشغيل الاستدلال عدة مرات وقياس سرعة النموذج الخاص بك. لدينا صفحة قياس أداء مستقلة يمكن استخدامها لهذا الغرض: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html قد تلاحظ أننا نتجاهل القياسات من عملية الإحماء الأولية - وذلك لأن (بشكل عام) الاستدلال الأول لنموذجك سيكون أبطأ بعدة مرات من الاستدلالات اللاحقة بسبب الحمل الزائد لإنشاء القوام وتجميع التظليل.