שמור וטען דגמים

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

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

שמור tf.Model

tf.Model ו tf.Sequential הוא לספק פונקציה model.save המאפשר לך לשמור את הטופולוגיה ומשקולות של מודל.

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

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

בואו נסתכל איך נראה הקוד לשמירת דגם

const saveResult = await model.save('localstorage://my-model-1');

יש לשים לב לכמה דברים:

  • save השיטה לוקחת טיעון מחרוזת כמו-URL המתחיל ערכה. זה מתאר את סוג היעד אליו אנו מנסים לשמור דגם. בדוגמה שלעיל התוכנית היא localstorage://
  • התכנית מלווה נתיב. בדוגמא מעל השביל הוא my-model-1 .
  • save השיטה היא אסינכרוני.
  • הערך המוחזר של model.save הוא אובייקט JSON שנושא מידע כגון גדלים בייט של הטופולוגיה המשקולות של המודל.
  • הסביבה המשמשת לשמירת המודל אינה משפיעה על אילו סביבות יכולות לטעון את המודל. שמירת דגם ב-node.js לא מונעת את טעינתו בדפדפן.

להלן נבחן את התוכניות השונות הזמינות.

אחסון מקומי (דפדפן בלבד)

תוכנית: localstorage://

await model.save('localstorage://my-model');

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

IndexedDB (דפדפן בלבד)

תוכנית: indexeddb://

await model.save('indexeddb://my-model');

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

הורדות קבצים (דפדפן בלבד)

תוכנית: downloads://

await model.save('downloads://my-model');

זה יגרום לדפדפן להוריד את קבצי הדגם למחשב של המשתמש. יופקו שני קבצים:

  1. קובץ הטקסט JSON בשם [my-model].json , אשר נושא את הטופולוגיה הפניה לקובץ המשקולות המתואר להלן.
  2. קובץ בינארי נושא את ערכי המשקל בשם [my-model].weights.bin .

אתה יכול לשנות את השם [my-model] כדי לקבל קבצים עם שם אחר.

מכיוון .json נקודות הקובץ .bin באמצעות נתיב יחסי, את שני הקבצים צריכים להיות באותה תיקייה.

בקשת HTTP(S).

תוכנית: http:// או https://

await model.save('http://model-server.domain/upload')

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

המודל יישלח לשרת HTTP שצוין באמצעות POST בקשה. הגוף של ה- POST הוא multipart/form-data הפורמט מורכב משני קבצים

  1. קובץ הטקסט JSON בשם model.json , אשר נושא את הטופולוגיה והפנית משקולות קובץ מתואר להלן.
  2. קובץ בינארי נושא את ערכי המשקל בשם model.weights.bin .

שימו לב שהשם של שני הקבצים תמיד יהיה בדיוק כפי שצוין למעלה (השם מובנה בפונקציה). זה doc API מכיל קטע קוד פיתון המדגים כיצד אפשר להשתמש בבקבוק האינטרנט במסגרת לטפל בבקשה שמקורה save .

לעתים קרובות תצטרך להעביר ארגומנטים נוספים או כותרות בקשה לשרת ה-HTTP שלך (למשל לצורך אימות או אם ברצונך לציין תיקיה שבה יש לשמור את המודל). אתה יכול להשתלט-גרגירים עדינים על היבטים אלה של הבקשות save על ידי החלפת טיעון מחרוזת כתוב אתר tf.io.browserHTTPRequest . API זה מעניק גמישות רבה יותר בשליטה בבקשות HTTP.

לדוגמה:

await model.save(tf.io.browserHTTPRequest(
    'http://model-server.domain/upload',
    {method: 'PUT', headers: {'header_key_1': 'header_value_1'} }));

מערכת קבצים מקורית (Node.js בלבד)

תוכנית: file://

await model.save('file:///path/to/my-model');

כשמריצים על Node.js יש לנו גם גישה ישירה למערכת הקבצים ויכולים לשמור שם דגמים. פקוד הנ"ל תחסוך שני קבצים אל path שצוין afer scheme .

  1. קובץ הטקסט JSON בשם [model].json , אשר נושא את הטופולוגיה הפניה לקובץ המשקולות המתואר להלן.
  2. קובץ בינארי נושא את ערכי המשקל בשם [model].weights.bin .

שימו לב שהשם של שני הקבצים תמיד יהיה בדיוק כפי שצוין למעלה (השם מובנה בפונקציה).

טוען tf.Model

בהינתן מודל שנשמר באמצעות אחת השיטות הנ"ל, אנו יכולים לטעון אותו באמצעות tf.loadLayersModel API.

בואו נסתכל איך נראה הקוד לטעינת דגם

const model = await tf.loadLayersModel('localstorage://my-model-1');

יש לשים לב לכמה דברים:

  • כמו model.save() , את loadLayersModel הפונקציה לוקחת URL דמוי מחרוזת טיעון שמתחיל תכנית. זה מתאר את סוג היעד ממנו אנו מנסים לטעון דגם.
  • התכנית מלווה נתיב. בדוגמה מעל השביל הוא my-model-1 .
  • ניתן להחליף את המחרוזת דמוית url באובייקט התואם לממשק IOHandler.
  • tf.loadLayersModel() הפונקציה היא אסינכרוני.
  • הערך המוחזר של tf.loadLayersModel הוא tf.Model

להלן נבחן את התוכניות השונות הזמינות.

אחסון מקומי (דפדפן בלבד)

תוכנית: localstorage://

const model = await tf.loadLayersModel('localstorage://my-model');

המון זה מודל בשם my-model מן הדפדפן אחסון המקומי .

IndexedDB (דפדפן בלבד)

תוכנית: indexeddb://

const model = await tf.loadLayersModel('indexeddb://my-model');

המון זה מודל מן הדפדפן שהתווסף לאינדקס אחסון.

HTTP(S)

תוכנית: http:// או https://

const model = await tf.loadLayersModel('http://model-server.domain/download/model.json');

זה טוען מודל מנקודת קצה http. לאחר טעינת json קובץ הפונקציה תגרום בקשות מתאימות .bin קבצים כי json אזכור קובץ.

מערכת קבצים מקורית (Node.js בלבד)

תוכנית: file://

const model = await tf.loadLayersModel('file://path/to/my-model/model.json');

כשמריצים על Node.js יש לנו גם גישה ישירה למערכת הקבצים ויכולים לטעון מודלים משם. שימו לב שבקריאת הפונקציה למעלה אנו מתייחסים לקובץ model.json עצמו (בעוד שבשמירה אנו מציינים תיקיה). מקביל .bin קובץ (ים) צריך להיות באותה התיקייה כמו json הקובץ.

טוען דגמים עם IOHandlers

אם תוכניות לעיל אינן מספיקות עבור הצרכים שלך אתה יכול ליישם התנהגות טעינה מותאמת אישית עם IOHandler . אחת IOHandler כי TensorFlow.js מספק היא tf.io.browserFiles המאפשר למשתמשים בדפדפן כדי להעלות קבצי דגם בדפדפן. עיין בתיעוד עבור מידע נוסף.

שמירה וטעינה של דגמים עם IOHandlers מותאמים אישית

אם תוכניות הנ"ל אינן מספיקות להעמסה שלך או צורך חיסכון שתוכל ליישם התנהגות בהמשכים מותאמת אישית על ידי יישום IOHandler .

IOHandler הוא אובייקט עם save ואת load שיטה.

save הפונקציה לוקחת פרמטר אחד כי הוא תואם את ModelArtifacts הממשק וצריך לחזור הבטחה זו פותרת אל SaveResult אובייקט.

load הפונקציה לוקחת שום פרמטרים וצריכה לחזור הבטחה זו פותרת אל ModelArtifacts להתנגד. זהו אותו אובייקט מועבר save .

ראה BrowserHTTPRequest עבור דוגמה כיצד ניתן להטמיע IOHandler.