TensorFlow.js מגיע עם מגוון דגמים שהוכשרו מראש שמוכנים לשימוש בדפדפן - ניתן למצוא אותם ב- repo הדגמים שלנו. עם זאת, ייתכן שמצאת או חיברת מודל TensorFlow במקום אחר שבו תרצה להשתמש ביישום האינטרנט שלך. TensorFlow.js מספק ממיר דגם למטרה זו. לממיר TensorFlow.js שני רכיבים:
- כלי שורת פקודה הממיר דגמי Keras ו- TensorFlow לשימוש ב- TensorFlow.js.
- API לטעינה וביצוע של המודל בדפדפן עם TensorFlow.js.
המר את הדגם שלך
ממיר TensorFlow.js עובד עם מספר פורמטים שונים של דגמים:
SavedModel : זהו פורמט ברירת המחדל שבו נשמרים דגמי TensorFlow. פורמט SavedModel מתועד כאן .
דגם Keras : דגמי Keras נשמרים בדרך כלל כקובץ HDF5. מידע נוסף על שמירת דגמי Keras ניתן למצוא כאן .
מודול TensorFlow Hub : אלו הם דגמים שנארזו להפצה ב- TensorFlow Hub, פלטפורמה לשיתוף וגילוי מודלים. את ספריית הדגמים ניתן למצוא כאן .
בהתאם לסוג הדגם שאתה מנסה להמיר, תצטרך להעביר ארגומנטים שונים לממיר. לדוגמה, נניח ששמרת דגם 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’);
ה-API של tf.loadGraphModel
מחזיר tf.FrozenModel
, מה שאומר שהפרמטרים קבועים ולא תוכל לכוונן את המודל שלך עם נתונים חדשים. ה-API של tf.loadLayersModel
מחזיר tf.Model, שניתן לאמן. למידע על איך להכשיר דגם tf., עיין במדריך דגמי הרכבות .
לאחר ההמרה, מומלץ להפעיל הסקת מסקנות מספר פעמים ולסמן את המהירות של הדגם שלך. יש לנו דף מידוד עצמאי שניתן להשתמש בו למטרה זו: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html ייתכן שתבחין שאנו פוסלים מדידות מהפעלת חימום ראשונית - הסיבה לכך היא (באופן כללי) ההסקה הראשונה של הדגם שלך תהיה איטית פי כמה מההסקות הבאות עקב התקורה של יצירת טקסטורות והידור הצללות.