בינה מלאכותית (AI) צברה פופולריות משמעותית בשנים האחרונות.
אם אתה מהנדס תוכנה, מדען מחשבים או חובב מדעי נתונים באופן כללי, אז כנראה שאתה מסוקרן מהיישומים המדהימים של עיבוד תמונה, זיהוי תבניות וזיהוי אובייקטים שמספקים תחום זה.
תת התחום החשוב ביותר של AI שכנראה שמעתם עליו הוא Deep Learning. תחום זה מתמקד באלגוריתמים רבי עוצמה (הוראות תוכניות מחשב) המבוססים על פונקציונליות המוח האנושי המכונה רשתות עצביות.
במאמר זה, נעבור על הרעיון של רשתות עצביות וכיצד לבנות, לקמפל, להתאים ולהעריך מודלים אלה באמצעות פיתון.
רשתות עצביות
רשתות עצביות, או NNs, הן סדרה של אלגוריתמים המעוצבים לפי הפעילות הביולוגית של המוח האנושי. רשתות עצביות מורכבות מצמתים, הנקראים גם נוירונים.
אוסף של צמתים אנכיים ידועים בשם שכבות. המודל מורכב מקלט אחד, פלט אחד ומספר שכבות נסתרות. כל שכבה מורכבת מצמתים, הנקראים גם נוירונים, שבהם מתבצעים החישובים.
בתרשים הבא, העיגולים מייצגים את הצמתים ואוסף הצמתים האנכי מייצג את השכבות. יש שלוש שכבות בדגם הזה.
הצמתים של שכבה אחת מחוברים לשכבה הבאה באמצעות קווי תמסורת כפי שנראה להלן.
מערך הנתונים שלנו מורכב מנתונים מסומנים. המשמעות היא שלכל ישות נתונים הוקצה ערך שם מסוים.
אז עבור מערך נתונים של סיווג בעלי חיים יהיו לנו תמונות של חתולים וכלבים בתור הנתונים שלנו, עם 'חתול' ו'כלב' בתור התוויות שלנו.
חשוב לציין שיש להמיר את התוויות לערכים מספריים כדי שהמודל שלנו יבין אותן, ולכן תוויות החיות שלנו הופכות ל'0' עבור חתול ו-'1' עבור כלב. גם הנתונים וגם התוויות מועברים דרך המודל.
למידה
נתונים מוזנים למודל ישות אחת בכל פעם. נתונים אלה מחולקים לנתחים ומועברים דרך כל צומת של המודל. צמתים מבצעים פעולות מתמטיות על נתחים אלה.
אינך צריך לדעת את הפונקציות המתמטיות או החישובים עבור הדרכה זו, אך חשוב שיהיה לך מושג כללי כיצד המודלים הללו עובדים. לאחר סדרה של חישובים בשכבה אחת, הנתונים מועברים לשכבה הבאה וכן הלאה.
לאחר השלמתו, המודל שלנו חוזה את תווית הנתונים בשכבת הפלט (לדוגמה, בבעיית סיווג בעלי חיים אנו מקבלים חיזוי '0' עבור חתול).
לאחר מכן, המודל ממשיך להשוות את הערך החזוי הזה לזה של ערך התווית בפועל.
אם הערכים תואמים, המודל שלנו ייקח את הקלט הבא אבל אם הערכים שונים, המודל יחשב את ההפרש בין שני הערכים, הנקרא אובדן, ויתאים את חישובי הצומת כדי לייצר תוויות תואמות בפעם הבאה.
מסגרות למידה עמוקה
כדי לבנות רשתות עצביות בקוד, עלינו לייבא מסגרות למידה עמוקה המכונה ספריות המשתמשות בסביבת הפיתוח המשולבת שלנו (IDE).
מסגרות אלו הן אוסף של פונקציות שנכתבו מראש שיעזרו לנו במדריך זה. אנו נשתמש במסגרת Keras כדי לבנות את המודל שלנו.
Keras היא ספריית Python שמשתמשת ב-Deep Learning ובינה מלאכותית, הנקראת זרימת מתיחה ליצור NNs בצורה של מודלים עוקבים פשוטים בקלות.
Keras מגיעה גם עם דגמים קיימים משלה שניתן להשתמש בהם גם כן. עבור הדרכה זו, ניצור מודל משלנו באמצעות Keras.
אתה יכול ללמוד עוד על מסגרת למידה עמוקה זו מה- אתר קרס.
בניית רשת עצבית (מדריך)
בואו נעבור לבניית רשת עצבית באמצעות Python.
הצהרת בעיה
רשתות עצביות הן סוג של פתרון לבעיות מבוססות בינה מלאכותית. עבור הדרכה זו נעבור על נתוני פימה אינדיאנים סוכרת, אשר זמינים כאן.
UCI Machine Learning הרכיב את מערך הנתונים הזה ומכיל תיעוד רפואי של חולים הודים. המודל שלנו צריך לחזות אם לחולה יש הופעת סוכרת בתוך 5 שנים או לא.
טעינת מערך נתונים
מערך הנתונים שלנו הוא קובץ CSV יחיד בשם 'diabetes.csv' שניתן לתפעל אותו בקלות באמצעות Microsoft Excel.
לפני יצירת המודל שלנו, עלינו לייבא את מערך הנתונים שלנו. בעזרת הקוד הבא תוכל לעשות זאת:
יבוא פנדות כ- pd
data = pd.read_csv('diabetes.csv')
x = data.drop(“תוצאה”)
y = נתונים["תוצאה"]
כאן אנו משתמשים ב- פנדות הספרייה כדי להיות מסוגלים לתפעל את נתוני קובץ ה-CSV שלנו, read_csv() היא פונקציה מובנית של Pandas המאפשרת לנו לאחסן את הערכים בקובץ שלנו למשתנה שנקרא 'data'.
המשתנה x מכיל את מערך הנתונים שלנו ללא נתוני התוצאה (תוויות). אנו משיגים זאת עם הפונקציה data.drop() המסירה את התוויות עבור x, בעוד y מכיל רק את נתוני התוצאה (תווית).
בניית מודל רציף
שלב 1: ייבוא ספריות
ראשית, עלינו לייבא את TensorFlow ו-Keras, יחד עם פרמטרים מסוימים הנדרשים לדגם שלנו. הקוד הבא מאפשר לנו לעשות זאת:
יבוא טנסור זורם כ- tf
מ- tensorflow ייבוא קרס
מ-tensorflow.keras.models ייבוא Sequential
מ tensorflow.keras.layers ייבוא Activation, Dense
מאת tensorflow.keras.optimizers ייבוא אדם
מאת tensorflow.keras.metrics ייבוא categorical_crossentropy
לדגם שלנו אנו מייבאים שכבות צפופות. אלו שכבות מחוברות לחלוטין; כלומר, כל צומת בשכבה מחובר באופן מלא עם צומת אחר בשכבה הבאה.
אנחנו גם מייבאים א הפעלה פונקציה הדרושה לשינוי קנה מידה של נתונים שנשלחים לצמתים. מיטוב יובאו גם כדי למזער אובדן.
אדם הוא כלי אופטימיזציה ידוע שהופך את חישובי הצמתים לעדכון המודל שלנו בצורה יעילה יותר, יחד עם categorical_crossentropy כלומר סוג פונקציית ההפסד (מחשב את ההפרש בין ערכי התווית הממשיים והחזויים) שבה נשתמש.
שלב 2: עיצוב הדגם שלנו
לדגם שאני יוצר יש שכבת קלט אחת (עם 16 יחידות), אחת נסתרת (עם 32 יחידות) ושכבת פלט אחת (עם 2 יחידות). המספרים הללו אינם קבועים והם תלויים לחלוטין בבעיה הנתונה.
קביעת המספר הנכון של יחידות ושכבות הוא תהליך שניתן לשפר שעות נוספות באמצעות תרגול. ההפעלה מתאימה לסוג קנה המידה שנבצע בנתונים שלנו לפני שנעביר אותם דרך צומת.
Relu ו-Softmax הן פונקציות הפעלה ידועות עבור משימה זו.
model = Sequential([
Dense(יחידות = 16, input_shape = (1,), הפעלה = 'relu'),
Dense(יחידות = 32, הפעלה = 'relu'),
Dense(יחידות = 2, הפעלה = 'softmax')
])
כך אמור להיראות תקציר הדגם:
הכשרת המודל
המודל שלנו יוכשר בשני שלבים, הראשון הוא הידור של המודל (חיבור המודל) והאחר הוא התאמת המודל למערך נתונים נתון.
ניתן לעשות זאת באמצעות הפונקציה model.compile() ואחריה הפונקציה model.fit() .
model.compile(optimizer = Adam(learning_rate = 0.0001), loss = 'binary_crossentropy', metrics = ['accuracy'])
model.fit(x, y, epochs = 30, batch_size = 10)
ציון מדד ה'דיוק' מאפשר לנו לצפות בדיוק של המודל שלנו במהלך האימון.
מכיוון שהתוויות שלנו הן בצורת 1 ו-0, אנו נשתמש בפונקציית הפסד בינארית כדי לחשב את ההבדל בין תוויות בפועל לתוויות חזויות.
מערך הנתונים מפוצל גם לאצוות של 10 (batch_size) ויועבר דרך המודל 30 פעמים (תקופות). עבור מערך נתונים נתון, x יהיה הנתונים ו-y יהיה התוויות המתאימות לנתונים.
בדיקת מודל באמצעות חיזויים
כדי להעריך את המודל שלנו, אנו עורכים תחזיות על נתוני הבדיקה באמצעות הפונקציה predict() .
predictions = model.predict(x)
וזה הכל!
כעת אתה אמור להבין טוב את ה למידה עמוקה אפליקציה, רשתות עצביות, איך הן פועלות באופן כללי וכיצד לבנות, לאמן ולבדוק מודל בקוד Python.
אני מקווה שהמדריך הזה ייתן לך את ההתחלה ליצור ולפרוס מודלים משלך של Deep Learning.
ספר לנו בתגובות אם המאמר היה מועיל.
השאירו תגובה