قم باستيراد نموذج TensorFlow إلى TensorFlow.js

يمكن حفظ النماذج المستندة إلى TensorFlow GraphDef (التي يتم إنشاؤها عادةً عبر Python API) بأحد التنسيقات التالية:

  1. نموذج TensorFlow المحفوظ
  2. النموذج المجمد
  3. وحدة 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: التحميل والتشغيل في المتصفح

  1. قم بتثبيت حزمة npm الخاصة بـ tfjs-converter:

yarn add @tensorflow/tfjs أو npm install @tensorflow/tfjs

  1. إنشاء مثيل لفئة 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` ...