היכונו לעידן המכונות החושבות, למידת מכונה בדפדפן באמצעות ספריית TensorFlow.js

מחבר:
בתאריך:

גוגל שיחררו את ספריית TensorFlow.js  שמאפשרת לעשות למידת מכונה (Machine Learning, ML)  בדפדפן. זה פותח עולם חדש ומלהיב של אפשרויות למתכנתי אינטרנט מפני שניתן מעכשיו לשלב יישומים של בינה מלאכותית שכתובים ב-JavaScript בתוך דפי האינטרנט שאנחנו כותבים.

רוצים דוגמה למה שאפשר לעשות עם זה? בבקשה:

  1. רוצים להמליץ למשתמשים על מוזיקה על סמך טעמם האישי, אפשר לעשות את זה בזכות מודלים של למידת מכונה.
  2. רוצים לזהות את המשתמשים על פי המראה (משימה קשה באופן כללי למחשבים)? אפשר לפתח יישום כזה שירוץ בדפדפן.
  3. רוצים לזהות לוותינים כחולים בלב האוקיינוס בלי לעייף את העיניים שלכם בסריקת מיליוני תמונות שמגיעות מלוויינים? אמנו את המחשב לעשות את העבודה במקומכם.
  4. רוצים לחסוך בעלות הטלפנים והתומכים בארגון. למה שלא תעבירו את התמיכה הטכנית למכונה שתענה בקול אנושי?
  5. ועוד הרבה אפשרויות שנפתחות בפנינו הודות ליכולות הבינה המלאכותית שספריות דוגמת TensorFlow מעניקות למחשבים.

דוגמה ללמידת מכונה בדפדפן באמצעות tensorflow.js

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

הסקריפט שנפתח מורכב משלושה שלבים:

  • איסוף הנתונים שעליהם אנחנו רוצים לאמן את המודל. בשביל דוגמה כל כך פשוטה, נשתמש ברשימה של נקודות שמבטאות את היחס Y=2X+1.
  • אימון של מודל לזהות את היחס לפי הדוגמאות. שימו לב! אנחנו לא אומרים למחשב מה היחס בין ה-X וה-Y הוא צריך להגיע ליחס בעצמו.
  • תחזית. לאחר שאימנו את המודל, נאפשר למשתמש להזין ערך של X כדי שהדפדפן ימצא בעצמו, על סמך הנוסחה שהוא פיתח, את ערכו של Y.

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

 

ה-HTML

כולל שלושה אלמנטים:

<input type="number" id="theNumber"> 
<button id="theButton">Predict</button> 
<span id="thePrediction"> </span>
  1. שדה input שלתוכו יזין המשתמש את הערך של X.
  2. כפתור שלחיצה עליו תפעיל את הפונקציה שחוזה את הערך של Y.
  3. span שיציג את הערך החזוי של Y.

כדי שנוכל לעבוד עם TensorFlow בדפדפן, נייבא אותו מ-CDN, ובאותה ההזדמנות נייבא את jQuery בשביל ממשק המשתמש.

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.12.5"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

 

ה-JavaScript

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

// Define a model to fit linear regression.
const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));

2. מכינים את המודל לאימון, ולשם כך צריך להגדיר את הפונקציות שהמודל צריך להשתמש בהם לחישוב ה-loss וה-optimizer.

model.compile({
    loss:      'meanSquaredError', 
    optimizer: 'sgd'
});

3. הדוגמה שעליה נאמן את המודל:

const xs = tf.tensor1d([1,2,3,4,5,6]);
const ys = tf.tensor1d([3,5,7,9,11,13]);

את ערכי ה-X של הדוגמאות נזין לתוך הטנסור ששמו xs.

ואת ערכי ה-Y של הדוגמאות לתוך הטנסור ys.

tensor הוא מערך רב-ממדי. ולצורך הדוגמה הפשוטה שלנו אנחנו משתמשים במערך שיש לו מימד אחד. מערך של 2 על 2 יראה כך:

tf.tensor2d([1,2],[10,100)

4. הפונקציה המאמנת שמזהה את הדפוס:

async function train() {
  // Train to find the trend in the model
  await model.fit(xs, ys, {epochs: 500});

  alert('model trained');
}

מכיוון שהפונקציה יכולה לרוץ במשך כמה זמן לפני שמתקבלת תוצאה נשתמש ב-JavaScript אסינכרוני באמצעות async / await.

התאמת המודל (מציאת הקשר בין ערכי ה-X וה-Y) נעשית באמצעות הפונקציה fit, ומספר הפעמים שהפונקציה צריכה לרוץ לפני שנאלץ אותה להפסיק הוא 500.

בסוף תהליך האימון, יקפוץ פופאפ שיגיד למשתמש שהמודל מאומן, ושהגיע הזמן להזין את הערך X  שהוא רוצה שהמחשב ימצא את ערך ה-Y שלו.

5. הפונקציה שעושה את התחזית:

const predict = function(val) {
    return model.predict(tf.tensor2d([val], [1, 1]));
}

הערך val הוא מה שהמשתמש מזין.

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

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

 

לצפייה בקוד שפיתחנו במדריך בפעולה

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

 

סיכום

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

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

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

הוסף תגובה חדשה

 

= 5 + 6