במדריך זה, תחקור יישום אינטרנט לדוגמה שמשתמש בעובד אינטרנט כדי להכשיר רשת עצבית חוזרת (RNN) לבצע הוספה של מספרים שלמים. האפליקציה לדוגמה אינה מגדירה במפורש את אופרטור ההוספה. במקום זאת, הוא מאמן את ה-RNN באמצעות סכומים לדוגמה.
כמובן, זו לא הדרך היעילה ביותר להוסיף שני מספרים שלמים! אבל המדריך מדגים טכניקה חשובה ב-Web ML: כיצד לבצע חישובים ארוכי טווח מבלי לחסום את השרשור הראשי, המטפל בלוגיקה של ממשק המשתמש.
היישום לדוגמה עבור מדריך זה זמין באינטרנט , כך שאינך צריך להוריד שום קוד או להגדיר סביבת פיתוח. אם תרצה להפעיל את הקוד באופן מקומי, השלם את השלבים האופציונליים ב -הפעל את הדוגמה באופן מקומי . אם אינך רוצה להגדיר סביבת פיתוח, תוכל לדלג אל חקור את הדוגמה .
הקוד לדוגמה זמין ב- GitHub .
(אופציונלי) הפעל את הדוגמה באופן מקומי
דרישות מוקדמות
כדי להפעיל את האפליקציה לדוגמה באופן מקומי, עליך להתקין את הדברים הבאים בסביבת הפיתוח שלך:
התקן והפעל את האפליקציה לדוגמה
- שכפל או הורד את מאגר
tfjs-examples
. שנה לספריית
addition-rnn-webworker
:cd tfjs-examples/addition-rnn-webworker
תלות בהתקנה:
yarn
הפעל את שרת הפיתוח:
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, ראה מודלים לאימון .