תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

היכונו לעידן המכונות החושבות, למידת מכונה בדפדפן באמצעות ספריית 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 כוכבים

 

 

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

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

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

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

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

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך קוראים בעברית לצ`ופצ`יק של הקומקום?