אימון מודל באמצעות Web Worker

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

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

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

הקוד לדוגמה זמין ב- GitHub .

(אופציונלי) הפעל את הדוגמה באופן מקומי

דרישות מוקדמות

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

התקן והפעל את האפליקציה לדוגמה

  1. שכפל או הורד את מאגר tfjs-examples .
  2. שנה לספריית addition-rnn-webworker :

    cd tfjs-examples/addition-rnn-webworker
    
  3. תלות בהתקנה:

    yarn
    
  4. הפעל את שרת הפיתוח:

    yarn run watch
    

חקור את הדוגמה

פתח את האפליקציה לדוגמה . (או, אם אתה מפעיל את הדוגמה באופן מקומי, עבור אל http://localhost:1234 בדפדפן שלך.)

אתה אמור לראות דף שכותרתו TensorFlow.js: תוספת RNN . עקוב אחר ההוראות כדי לנסות את האפליקציה.

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

  • ספרות : המספר המרבי של ספרות במונחים שיש להוסיף.
  • גודל אימון : מספר דוגמאות ההדרכה שיש להפיק.
  • סוג RNN : אחד מ- SimpleRNN , GRU או LSTM .
  • RNN Hidden Layer Size : הממדיות של מרחב הפלט (חייב להיות מספר שלם חיובי).
  • גודל אצווה : מספר דגימות לכל עדכון שיפוע.
  • איטרציות רכבת : מספר הפעמים לאימון המודל על ידי הפעלת model.fit()
  • # דוגמאות לבדיקה : מספר המחרוזות לדוגמה (לדוגמה, 27+41 ) להפקה.

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

חקור את הקוד

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

למידע נוסף על Web Workers, ראה Web Workers API ושימוש ב-Web Workers .

המודול הראשי של האפליקציה לדוגמה הוא index.js . הסקריפט index.js יוצר עובד אינטרנט המריץ את המודול worker.js :

const worker =
    new Worker(new URL('./worker.js', import.meta.url), {type: 'module'});

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

כדי לשלוח את נתוני הטופס לעובד, הסקריפט מפעיל את postMessage על העובד:

worker.postMessage({
  digits,
  trainingSize,
  rnnType,
  layers,
  hiddenSize,
  trainIterations,
  batchSize,
  numTestExamples
});

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

self.addEventListener('message', async (e) => {
  const { digits, trainingSize, rnnType, layers, hiddenSize, trainIterations, batchSize, numTestExamples } = e.data;
  const demo = new AdditionRNNDemo(digits, trainingSize, rnnType, layers, hiddenSize);
  await demo.train(trainIterations, batchSize, numTestExamples);
})

במהלך ההדרכה, העובד יכול לשלוח שני סוגי הודעות שונים, האחד עם isPredict מוגדר כ- true

self.postMessage({
  isPredict: true,
  i, iterations, modelFitTime,
  lossValues, accuracyValues,
});

והשני עם isPredict מוגדר כ- false .

self.postMessage({
  isPredict: false,
  isCorrect, examples
});

כאשר השרשור של ממשק המשתמש ( index.js ) מטפל באירועי הודעה, הוא בודק את דגל isPredict כדי לקבוע את צורת הנתונים המוחזרים מהעובד. אם isPredict נכון, הנתונים צריכים לייצג חיזוי, והסקריפט מעדכן את הדף באמצעות tfjs-vis . אם isPredict הוא false, הסקריפט מריץ גוש קוד שמניח שהנתונים מייצגים דוגמאות. הוא עוטף את הנתונים ב-HTML ומכניס את ה-HTML לדף.

מה הלאה

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

למידע נוסף על הכשרת מודל TensorFlow.js, ראה מודלים לאימון .