ייבא מודל TensorFlow אל TensorFlow.js

ניתן לשמור מודלים מבוססי TensorFlow GraphDef (בדרך כלל נוצרים באמצעות ה-API של Python) באחד מהפורמטים הבאים:

  1. TensorFlow SavedModel
  2. דגם קפוא
  3. מודול Tensorflow Hub

ניתן להמיר את כל הפורמטים שלעיל על ידי ממיר TensorFlow.js לפורמט שניתן לטעון ישירות אל TensorFlow.js לצורך הסקה.

(הערה: TensorFlow הוציאה משימוש את פורמט חבילת ההפעלה. אנא העבר את הדגמים שלך לפורמט SavedModel.)

דרישות

הליך ההמרה דורש סביבת Python; ייתכן שתרצה לשמור אחד מבודד באמצעות pipenv או virtualenv .

כדי להתקין את הממיר, הפעל את הפקודה הבאה:

 pip install tensorflowjs

ייבוא ​​מודל TensorFlow אל TensorFlow.js הוא תהליך בן שני שלבים. ראשית, המר מודל קיים לפורמט האינטרנט TensorFlow.js, ולאחר מכן טען אותו אל TensorFlow.js.

שלב 1. המר מודל TensorFlow קיים לפורמט האינטרנט TensorFlow.js

הפעל את סקריפט הממיר שסופק על ידי חבילת pip:

דוגמה 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://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. התקן את חבילת 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 .

ה-API 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` ...