Moti Gadian

Deep learning engineer and AI researcher on the academy. Interest about Generative Adversarial Networks (GAN) and Deep Reinforcement Learning (DRL). specialize in Python, Golang, and DevOps.
Deep learning engineer and AI researcher on the academy. Interest about Generative Adversarial Networks (GAN) and Deep Reinforcement Learning (DRL). specialize in Python, Golang, and DevOps.

TensorFlow 2 –מה נשתנה ?

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי Moti Gadian

לאחרונה הכריזה גוגל על שחרור גרסת אלפא לספרייה האהובה והפופולרית לבינה מלאכותית –  הלא היא TensorFlow. (פייר התרגשנו!), ספרייה זו אומצה בקרב רבים בעולם כולל מפתחים, חוקרים ,מהנדסים בכל תחום אפשרי החל מהנדסה ותכנות ועד לתחום החקלאות.

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

לפי האתר הרשמי של גוגל (tensorflow.org) פורסם שבגרסה החדשה, גוגל שמה לה למטרה מספר דברים מרכזיים:

  • להקל על המתכנתים את החיים
  • להפוך את צורת הכתיבה ליותר “פייתונית” (פחות להתעסק עם גרף האופרציות)
  • להוסיף יותר תמיכה ב High Level .
  • להוסיף ולשפר כלים למחקר
  • לעשות סדר בכל תתי הספריות והמודולים הרשמיים וגם באלו של הקהילה (Contrib)
  • תמיכה חזקה בכל מה שקשור לפרודקשיין בכל פלטפורמה.

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

אז בראש ובראשונה נדבר על השינוי ההיררכי בכל תתי הספריות והמודלים.

tensorflow models

https://medium.com/tensorflow/whats-coming-in-tensorflow-2-0-d3663832e9b8

לפי האתר הרשמי של גוגל חלוקת המודולים תהיה ברורה מאוד:

  1. מודולים וספריות של אימון
  2. מודולים וספריות של פרודקשיין (או גם “פריסת המודל” ושימושו בפועל באפליקציות )

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

מה עם קצת קוד ??

אז לחלק שמעניין את כולנו – קוד.

החידושים העיקריים הם שימת דגש על פשטות בבניית המודלים (רשתות) ומוכנות לפרודקשיין,

גוגל הפכה רשמית את מצב ברירת המחדל שלה ל Eager מאשר Graph – עד עכשיו כדי להגדיר מודל היינו צריכים להגדיר את האופרציות, המשתנים, והקבועים שלנו מראש ואז להריץ פעולות ע”י שימוש ב Session. אם היינו רוצים להריץ פעולות ישירות ללא הידור מקדים של הגרף היינו צריכים להפעיל מצב מיוחד ע”י הפקודה tf.enable_eager_execution  , כעת מצב זה הינו מצב ברירת המחדל, מצב זה בעצם מאפשר לכתוב פעולות בקונוטציה של פונקציות בפייתון ולהריץ אותם ישירות.

(ניתן לקרוא הכל בפרוטרוט בבלוג הרשמי באנגלית כאן)

Tensorflow בגרסה החדשה דוחפת יותר לכיוון של שימוש בספריית המעטפת Keras ע”י הוספת תמיכה בשלושה סוגי קונסטרוקציות:

  • Sequential Model– בנייה של מודל בצורה סדרתית שכבה על שכבה.

Sequential Model

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

Functional API

  • Model Subclassing– מצב זה הינו די חדש לגרסה 2.0 בו בעצם ניתן “לדרוס” (או לבצע ירושה לחובבי ה OOP) את מבנה המודל הכללי של Keras אך לשמור על ההתנהגות שלנו וכך בעצם ליצור מודלים הרבה יותר מורכבים אשר יכולים להכיל כל מיני אופרציות סף שלTensorflow עצמה.

Model Subclassing

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

חידושים בתחום הProduction

  • Distribution Strategiesאסטרטגיות ותצורות הפצה מובנות מראש של אופרציות באימון מפוצל (אימון שמתחלק בין כמה וכמה מחשבים או כרטיסי GPU) ללא צורך בשינוי הקוד או התאמתו לאימון מרובה.
  • Tensorflow Serving מודול המאפשר “הגשה” של רשתות (מודלים) בכל סביבה שהיא (שרת או ענן) לצורך ביצוע קריאות אל המודל וקבלת תשובה ללא התעסקות עם קונפיגורציות מסובכות.
  • Tensorflow Lite מודול המאפשר הגשה של רשתות על מכשירים דלי כוח חישובי כגון סמארטפונים, מכשירי ,IOTוכדו’.
  • jsמודול המאפשר הגשה של רשתות ע”י דפדפן פשוט בשפת Javascript.

 

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

מקווה שנהניתם… מוזמנים להגיב לשאול שאלות או לבקש בקשות לפוסטים ספציפיים בתגובות 😊

Posted by Moti Gadian in deep

למידת מכונה? לא לגאונים בלבד

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי Moti Gadian

תמיד חלמת ללמוד Machine Learning  או  Deep Learning  אבל נבהלת מכל הנוסחאות? , חיפשת דוגמאות קוד והתבלבלת מכל המושגים הטכניים? חושב שהנושא של למידת מכונה מיועד רק למתמטיקאים או מדענים? זה בדיוק המאמר בשבילך!

תחום ה Deep Learning צבר תאוצה בשנים האחרונות, וכולם רוצים לקחת חלק בטכנולוגיה הזו.

היום כאשר הנושא נכנס לתודעה ורואים את מיטב החברות הגדולות ( Google , Facebook ועוד) מפתחות ספריות או  Frameworks בינה מלאכותית  – כמעט כל מפתח יכול להתחיל לבנות מודל בסיסי בכמה שורות קוד פשוטות.

במאמר זה נתייחס לספרייה Keras (למרות שהיא יותר קרובה להיות Framework) שהינה ספרייה עילית לבניית מודלי בינה מלאכותית או בשמם המדעי Neural Networks .

ככלל, הFlow  של תהליך Deep Learning מורכב מ-3 חלקים עיקריים:

  1. הכנת המידע   (Data)
  2. הגדרת מודל
  3. בניית המודל
  4. אימון של המודל – הזנת
  5. המידע אליו והפעלת האלגוריתמים
  6. חיזוי (Prediction)  – שימוש במודל ובחינה שלו

לאחר שהתהליך הושלם והשגנו אחוז גבוה של דיוק (ההסתברות שהמודל שלנו יחזיר תשובות נכונות),

ניתן להכין את המודל לשלב ה-Production אולם אנחנו נעסוק בעיקר בחלק שבו אנו בונים מודל ומאמנים אותו.

מוכנים? אז בואו נתחיל!

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

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

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

המבנה הפשוט של רשת נוירונים מורכב מ-3 חלקים (שכבות) :

  • קלט
  • שכבות ביניים (hidden) עליהם מבוצעים החישובים
  • פלט

די עם ההקדמות תן לכתוב קוד!

את הקוד שלנו אנחנו נכתוב ב Python שהיא השפה הכי פופולארית לכתיבת מודלים.

שלב ראשון – התקנת הספריות:

פתחו את הטרמינל (שורת הפקודה) והקלידו את הפקודה הבאה

Pip install tensorflow

חכו כמה דק’ עד שהספרייה תתוקן.

(אנחנו בעצם מתקינים את הספריהTensorflow  מבית Google אולם Keras  כבר כלול בה כשכבת אבסטרקציה)

שלב 2  –  הכנת ה Data

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

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

שימו לב שחילקנו את הdata  שלנו שלני חלקים:

  • החלק המרכזי שעליו נאמן את המודל (train)
  • החלק שעליו נעשה test וכך נוכל לבחון את הביצועים של המודל עבור מידע שעדיין הוא לא ראה ואומן עליו.

שלב 3 – בניית המודל , קונפיגורציה והזנת המידע (אימון)

שלב 4  – מדידת ביצועים

לאחר שאימנו את המודל נותר כעת לבחון אותו על מידע חדש שהוא לא ראה מימיו כדי לראות את היעילות שלו בפעול הלכה למעשה.

בסוף הריצה אנו אמורים לקבל משהו דומה לזה:

evaluation result: loss(0.10702921551428735) | accuracy(0.9663)

זהוו !! – כל הכבוד בניתם את המודל הראשון שלכם.

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

Posted by Moti Gadian in deep