يمكن حفظ النماذج المستندة إلى TensorFlow GraphDef (التي يتم إنشاؤها عادةً عبر Python API) بأحد التنسيقات التالية:
- نموذج TensorFlow المحفوظ
- النموذج المجمد
- وحدة Tensorflow Hub
يمكن تحويل جميع التنسيقات المذكورة أعلاه بواسطة محول TensorFlow.js إلى تنسيق يمكن تحميله مباشرة إلى TensorFlow.js للاستدلال.
(ملاحظة: قام TensorFlow بإهمال تنسيق حزمة الجلسة. يرجى ترحيل النماذج الخاصة بك إلى تنسيق SavedModel.)
متطلبات
يتطلب إجراء التحويل بيئة بايثون؛ قد ترغب في الاحتفاظ بواحدة معزولة باستخدام Pipenv أو Virtualenv .
لتثبيت المحول، قم بتشغيل الأمر التالي:
pip install tensorflowjs
إن استيراد نموذج TensorFlow إلى TensorFlow.js هو عملية مكونة من خطوتين. أولاً، قم بتحويل نموذج موجود إلى تنسيق الويب TensorFlow.js، ثم قم بتحميله إلى TensorFlow.js.
الخطوة 1. تحويل نموذج TensorFlow موجود إلى تنسيق الويب TensorFlow.js
قم بتشغيل البرنامج النصي للمحول الذي توفره حزمة النقطة:
مثال للنموذج المحفوظ:
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_node_names='MobilenetV1/Predictions/Reshape_1' \
--saved_model_tags=serve \
/mobilenet/saved_model \
/mobilenet/web_model
مثال على النموذج المجمد:
tensorflowjs_converter \
--input_format=tf_frozen_model \
--output_node_names='MobilenetV1/Predictions/Reshape_1' \
/mobilenet/frozen_model.pb \
/mobilenet/web_model
مثال على وحدة Tensorflow Hub:
tensorflowjs_converter \
--input_format=tf_hub \
'https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/1' \
/mobilenet/web_model
الحجج الموضعية | وصف |
---|---|
input_path | المسار الكامل لدليل النموذج المحفوظ أو دليل حزمة الجلسة أو ملف النموذج المجمد أو مقبض أو مسار وحدة TensorFlow Hub. |
output_path | المسار لجميع العناصر الناتجة. |
خيارات | وصف |
---|---|
--input_format | تنسيق نموذج الإدخال استخدم tf_saved_model لـ SavedModel، وtf_frozen_model للنموذج المجمد، وtf_session_bundle لحزمة الجلسة، وtf_hub لوحدة TensorFlow Hub، وkeras لـ Keras HDF5. |
--output_node_names | أسماء عقد الإخراج، مفصولة بفواصل. |
--saved_model_tags | ينطبق فقط على تحويل SavedModel. علامات MetaGraphDef المراد تحميلها، بتنسيق مفصول بفواصل. افتراضيات serve . |
--signature_name | ينطبق فقط على تحويل وحدة TensorFlow Hub، والتوقيع للتحميل. افتراضيات إلى default . راجع https://www.tensorflow.org/hub/common_signatures/ |
استخدم الأمر التالي للحصول على رسالة مساعدة مفصلة:
tensorflowjs_converter --help
تحويل الملفات التي تم إنشاؤها
ينتج برنامج التحويل أعلاه نوعين من الملفات:
-
model.json
: الرسم البياني لتدفق البيانات وبيان الوزن -
group1-shard\*of\*
: مجموعة من ملفات الوزن الثنائية
على سبيل المثال، إليك نتيجة تحويل MobileNet v2:
output_directory/model.json
output_directory/group1-shard1of5
...
output_directory/group1-shard5of5
الخطوة 2: التحميل والتشغيل في المتصفح
- قم بتثبيت حزمة npm الخاصة بـ tfjs-converter:
yarn add @tensorflow/tfjs
أو npm install @tensorflow/tfjs
- إنشاء مثيل لفئة FrozenModel وتشغيل الاستدلال.
import * as tf from '@tensorflow/tfjs';
import {loadGraphModel} from '@tensorflow/tfjs-converter';
const MODEL_URL = 'model_directory/model.json';
const model = await loadGraphModel(MODEL_URL);
const cat = document.getElementById('cat');
model.execute(tf.browser.fromPixels(cat));
تحقق من العرض التوضيحي لـ MobileNet .
تقبل واجهة برمجة التطبيقات loadGraphModel
معلمة LoadOptions
إضافية، والتي يمكن استخدامها لإرسال بيانات الاعتماد أو الرؤوس المخصصة مع الطلب. للحصول على التفاصيل، راجع وثائقloadGraphModel() .
العمليات المدعومة
يدعم TensorFlow.js حاليًا مجموعة محدودة من عمليات TensorFlow. إذا كان النموذج الخاص بك يستخدم عملية غير مدعومة، فسيفشل البرنامج النصي tensorflowjs_converter
وسيقوم بطباعة قائمة بالعمليات غير المدعومة في النموذج الخاص بك. يرجى تقديم مشكلة لكل عملية لإعلامنا بالعمليات التي تحتاج إلى دعم لها.
تحميل الأوزان فقط
إذا كنت تفضل تحميل الأوزان فقط، فيمكنك استخدام مقتطف الكود التالي:
import * as tf from '@tensorflow/tfjs';
const weightManifestUrl = "https://example.org/model/weights_manifest.json";
const manifest = await fetch(weightManifestUrl);
this.weightManifest = await manifest.json();
const weightMap = await tf.io.loadWeights(
this.weightManifest, "https://example.org/model");
// Use `weightMap` ...