המרת מודל

TensorFlow.js מגיע עם מגוון רחב של דגמים מאומנים מראש כי הם מוכנים להשתמש בדפדפן - הם יכולים להימצא שלנו המודלים ריפו . עם זאת, ייתכן שמצאת או חיברת מודל TensorFlow במקום אחר שבו תרצה להשתמש ביישום האינטרנט שלך. TensorFlow.js מספקת מודל ממיר למטרה זו. לממיר TensorFlow.js שני רכיבים:

  1. כלי שורת פקודה הממיר דגמי Keras ו- TensorFlow לשימוש ב- TensorFlow.js.
  2. API לטעינה וביצוע של המודל בדפדפן עם TensorFlow.js.

המר את הדגם שלך

ממיר TensorFlow.js עובד עם מספר פורמטים שונים של דגמים:

SavedModel: זוהי תבנית ברירת המחדל שבו מודלים TensorFlow נשמרים. פורמט SavedModel מתועד כאן .

Keras דגם: מודלים Keras נשמרים בדרך כלל כקובץ HDF5. מידע נוסף אודות שמירת דגמי Keras ניתן למצוא כאן .

מודול Hub TensorFlow: אלה הם מודלים כי כבר ארוז להפצה על Hub TensorFlow, פלטפורמה לשיתוף ומגלים דגמים. ספריית המודל ניתן למצוא כאן .

בהתאם לסוג הדגם שאתה מנסה להמיר, תצטרך להעביר ארגומנטים שונים לממיר. לדוגמה, נניח שאתה חוסך בשם מודל 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/ ספרייה.

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

במהלך תהליך ההמרה אנו חוצים את גרף המודל ובודקים שכל פעולה נתמכת על ידי TensorFlow.js. אם כן, נכתוב את הגרף לפורמט שהדפדפן יכול לצרוך. אנו מנסים לייעל את המודל להגשה באינטרנט על ידי פיצול המשקולות לקבצים של 4MB - כך ניתן לאחסן אותם במטמון על ידי דפדפנים. אנחנו גם מנסים לפשט את הגרף המודל עצמו באמצעות קוד פתוח grappler הפרויקט. הפשטות הגרפים כוללות קיפול של פעולות סמוכות, ביטול תת-גרפים נפוצים וכו'. לשינויים אלו אין השפעה על הפלט של המודל. לצורך אופטימיזציה נוספת, משתמשים יכולים להעביר ארגומנט שמורה לממיר לכמת את המודל לגודל בתים מסוים. קוונטיזציה היא טכניקה להקטנת גודל המודל על ידי ייצוג משקלים עם פחות ביטים. על המשתמשים להקפיד להבטיח שהמודל שלהם שומר על מידת דיוק מקובלת לאחר הקוונטיזציה.

אם אנו נתקלים בפעולה לא נתמכת במהלך ההמרה, התהליך נכשל ואנו מדפיסים את שם הפעולה עבור המשתמש. אתה מוזמן לשלוח בעיה על שלנו GitHub ליידע אותנו על זה - אנו מנסים ליישם פעולות חדשות בתגובה לדרישת המשתמש.

שיטות עבודה מומלצות

למרות שאנו עושים כל מאמץ לבצע אופטימיזציה של המודל שלך במהלך ההמרה, לרוב הדרך הטובה ביותר להבטיח שהמודל שלך מתפקד טוב היא לבנות אותו תוך מחשבה על סביבות מוגבלות במשאבים. משמעות הדבר היא הימנעות מארכיטקטורות מורכבות מדי ומזעור מספר הפרמטרים (משקלים) במידת האפשר.

הפעל את הדגם שלך

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

כך נראה ה-API עבור מודול 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 API מחזירה tf.FrozenModel , כלומר פרמטרים קבועים ואתה לא יהיה מסוגל לכוונן את המודל עם נתונים חדשים. tf.loadLayersModel API מחזירה tf.Model, אשר ניתן לאמן. לקבלת מידע על איך לאמן tf.Model, עיינו במדריך מודלי רכבת .

לאחר ההמרה, מומלץ להפעיל הסקת מסקנות מספר פעמים ולהשוות את המהירות של הדגם שלך. יש לנו דף בהשוואות עצמאי שיכול לשמש למטרה זו: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html ניתן להבחין כי אנו להשליך מדידות מתוך ריצת חימום ראשונית - הסיבה לכך היא (באופן כללי) ההסקה הראשונה של הדגם שלך תהיה איטית פי כמה מההסקות הבאות עקב התקורה של יצירת טקסטורות והידור הצללות.