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

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

  1. TensorFlow SavedModel
  2. نموذج مجمد
  3. وحدة Tensorflow Hub

كل من الأشكال المذكورة أعلاه يمكن تحويلها من تحويل TensorFlow.js إلى تنسيق التي يمكن تحميلها مباشرة إلى TensorFlow.js للاستدلال.

(ملاحظة: لقد ألغى TensorFlow تنسيق حزمة الجلسة ، يرجى ترحيل النماذج الخاصة بك إلى تنسيق SavedModel.)

متطلبات

يتطلب إجراء التحويل بيئة بايثون ؛ قد ترغب في الاحتفاظ معزولة واحد باستخدام pipenv أو virtualenv . لتثبيت المحول ، قم بتشغيل الأمر التالي:

 pip install tensorflowjs

استيراد نموذج TensorFlow إلى TensorFlow.js عبارة عن عملية من خطوتين. أولاً ، قم بتحويل نموذج موجود إلى تنسيق الويب TensorFlow.js ، ثم قم بتحميله في TensorFlow.js.

الخطوة الأولى. قم بتحويل نموذج TensorFlow الحالي إلى تنسيق الويب TensorFlow.js

قم بتشغيل سكربت المحول الذي توفره حزمة النقطة:

الاستخدام: مثال على SavedModel:

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://hub.tensorflow.google.cn/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

الخطوة الثانية: التحميل والتشغيل في المتصفح

  1. قم بتثبيت حزمة tfjs-converter npm

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 API يقبل إضافية 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");