למידה עמוקה עם פיתון: מדריך למתחילים ללמידה עמוקה

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

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



מדעי הנתונים וזה הרכיבים

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



ציר זמן AI - למידה עמוקה עם פיתון - אדוריקה

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



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

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



למידה עמוקה היא תת-קבוצה של ML שהופכות את החישוב של רשת עצבית רב שכבתית לביצוע. היא משתמשת ברשתות עצביות כדי לדמות קבלת החלטות דמויי אנוש.

הצורך בלימוד עמוק

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

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

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

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

מהי למידה עמוקה?

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

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

פרפרטרון ורשתות עצביות מלאכותיות

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

  • דנדריט: מקבל אותות מנוירונים אחרים
  • גוף התא: מסכם את כל התשומות
  • אקסון: הוא משמש להעברת אותות לתאים האחרים

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

הוא מקבל n כניסות (המתאימות לכל תכונה). לאחר מכן הוא מסכם את התשומות הללו, מיישם טרנספורמציה ומייצר תפוקה. יש לו שתי פונקציות:

  • סיכום
  • טרנספורמציה (הפעלה)

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

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

  • ליניארי או זהות
  • יחידה או שלב בינארי
  • זיגמואיד או לוגיסטי
  • תן
  • ReLU
  • Softmax

נו. אם אתה חושב שפרספטרון פותר את הבעיה, אתה טועה. היו שתי בעיות עיקריות:

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

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

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

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

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

יישומים של למידה עמוקה

ישנם יישומים שונים של למידה עמוקה בתעשייה, הנה כמה מהחשובים שקיימים במשימות היום יום שלנו.

  • זיהוי דיבור

  • מכונת תרגום

  • זיהוי פנים ותיוג אוטומטי

  • עוזרים אישיים וירטואליים

c ++ מהו מרחב שמות
  • רכב עם נהיגה עצמית

  • צ'טבוטים

מדוע פיתון ללימוד עמוק?

  • הוא כלי כזה שיש לו תכונה ייחודית, של להיות שפת תכנות למטרות כלליות כמו להיות קל לשימוש כשמדובר במחשוב אנליטי וכמותי.
  • זה מאוד קל להבנה
  • פייתון הוא הקלדה דינמית
  • עָצוּם
  • מגוון עצום של ספריות למטרות שונות כמו Numpy, Seaborn, Matplotlib, Pandas ו- Scikit-learning

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

למידה עמוקה עם פיתון: דוגמה לפרספטרון

עכשיו אני בטוח שאתם חייבים להכיר את העבודה של ' אוֹ' שַׁעַר. התפוקה היא אחד אם אף אחת מהתשומות היא גם כן אחד.

לכן, Perceptron יכול לשמש כמפריד או כקו החלטה המחלק את מערך הקלט של OR Gate, לשתי מחלקות:

כיתה 1: תשומות עם תפוקה כ- 0 שנמצאת מתחת לקו ההחלטה.
מחלקה 2: תשומות עם תפוקה כ- 1 שנמצאת מעל קו ההחלטה או המפריד.

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

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

שלב 1: ייבא את כל הספרייה הנדרשת

כאן אני הולך לייבא רק ספרייה אחת, כלומר. TensorFlow

ייבא טנסור זורם כ- tf

שלב 2: הגדר משתנים וקטוריים עבור קלט ופלט

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

train_in = [[0,0,1], [0,1,1], [1,0,1], [1,1,1]] train_out = [[0], [1], [1], [1]]

שלב 3: הגדר משתנה ממשקל

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

w = tf. משתנה (tf.random_normal ([3, 1], זרע = 15))

שלב 4: הגדר מצייני מיקום עבור קלט ופלט

עלינו להגדיר מצייני מיקום כך שיוכלו לקבל תשומות חיצוניות בריצה.

x = tf.placeholder (tf.float32, [None, 3]) y = tf.placeholder (tf.float32, [None, 1])

שלב 5: חישוב פונקציית הפלט וההפעלה

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

פלט = tf.nn.relu (tf.matmul (x, w))

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

שלב 6: חישוב העלות או השגיאה

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

הפסד = tf.reduce_sum (tf.square (פלט - y))

שלב 7: מזעור שגיאה

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

אופטימיזציה = tf.train.GradientDescentOptimizer (0.01) רכבת = optimizer.minimize (הפסד)

שלב 8: אתחל את כל המשתנים

משתנים מוגדרים רק עם tf. משתנה. לכן עלינו לאתחל את המשתנים שהוגדרו.

init = tf.global_variables_initializer () sess = tf.Session () sess.run (init)

שלב 9: אימון פרספטרון באיטרציות

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

עבור i בטווח (100): sess.run (רכבת, {x: train_in, y: train_out}) cost = sess.run (loss, feed_dict = {x: train_in, y: train_out}) print ('Epoch-- ', i,' - הפסד - ', עלות)

שלב 10: פלט

……

……

כפי שניתן לראות כאן, ההפסד התחיל ב 2.07 והסתיים בשעה 0.27

.

למידה עמוקה עם פיתון: יצירת רשת עצבית עמוקה

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

אנו נשתמש בערכת הנתונים MNIST. מערך הנתונים MNIST מורכב מ 60,000 אימונים דוגמאות ו 10,000 בדיקות דוגמאות של תמונות ספרות בכתב יד. התמונות בגודל 28 × 28 פיקסלים והפלט יכול לשכב בין 0-9 .

המשימה כאן היא להכשיר מודל שיכול לזהות במדויק את הספרה הקיימת בתמונה

ראשית, אנו משתמשים בייבוא ​​להלן כדי להביא את פונקציית ההדפסה מ- Python 3 ל- Python 2.6+. הצהרות __ עתיד__ צריכות להיות בסמוך לראש הקובץ מכיוון שהן משנות דברים מהותיים לגבי השפה, ולכן המהדר צריך לדעת עליהם מההתחלה.

מתוך __future__ פונקציית הדפסה ייבוא

להלן הקוד עם הערות בכל שלב

# ייבא נתוני MNIST מ tensorflow.examples.tutorials.mnist ייבוא ​​input_data mnist = input_data.read_data_sets ('/ tmp / data /', one_hot = True) ייבא tensorflow כ- tf ייבוא ​​matplotlib.pyplot כ- plt # פרמטרים learning_rate = 0.001 training_epochs = 15 batch_size = 100 display_step = 1 # פרמטרי רשת n_hidden_1 = 256 # מספר שכבה ראשונה של תכונות n_hidden_2 = 256 # מספר שכבה שני של תכונות n_input = 784 # קלט נתונים MNIST (צורת תמונה: 28 * 28) n_classes = 10 # MNIST סך הכל שיעורים ( 0-9 ספרות) # tf קלט גרף x = tf.placeholder ('float', [None, n_input]) y = tf.placeholder ('float', [None, n_classes]) # צור דגם def multilayer_perceptron (x, משקולות , הטיות): # שכבה נסתרת עם שכבת הפעלה של RELU_1 = tf.add (tf.matmul (x, משקולות ['h1']), הטיות ['b1']) layer_1 = tf.nn.relu (layer_1) # שכבה נסתרת עם שכבת הפעלה RELU_2 = tf.add (tf.matmul (שכבה_1, משקולות ['h2']), הטיות ['b2']) שכבה_2 = tf.nn.relu (שכבה_2) # שכבת פלט עם הפעלה לינארית out_layer = tf. matmul (שכבה _2, משקולות ['החוצה']) + הטיות ['החוצה'] החזר החוצה_שכבה # חנות משקל שכבות ומשקולות הטיה = {'h1': tf. משתנה (tf.random_normal ([n_input, n_hidden_1])), 'h2' : tf.Variable (tf.random_normal ([n_hidden_1, n_hidden_2])), 'out': tf.Variable (tf.random_normal ([n_hidden_2, n_classes]))} biases = {'b1': tf.Variable (tf. random_normal ([n_hidden_1])), 'b2': tf.Variable (tf.random_normal ([n_hidden_2])), 'out': tf.Variable (tf.random_normal ([n_classes]))} # בניית מודל pred = multilayer_perceptron (x, משקולות, הטיות) # הגדר אובדן ועלות אופטימיזציה = tf.reduce_mean (tf.nn.softmax_cross_entropy_with_logits (logits = pred, labels = y)) אופטימיזציה = tf.train.AdamOptimizer (שיעור_למידה = שיעור למידה) .מינימום (עלות) # אתחול המשתנים init = tf.global_variables_initializer () # צור רשימה ריקה לאחסון היסטוריית העלויות והיסטוריית הדיוק cost_history = [] accuracy_history = [] # הפעל את הגרף עם tf.Session () כ- sess: sess.run (init ) # מחזור אימונים לתקופות בטווח (אימוני_אימונים): avg_cost = 0. total_batch = int (mnist.train.num_examples / batch_size) # לולאה על כל הקבוצות עבור i בטווח (total_batch): batch_x, batch_y = mnist.train.next_batch (batch_size) # אופטימיזציה של הפעלה op (backprop) ועלות op (כדי לקבל ערך אובדן) _, c = sess.run ([אופטימיזציה, עלות], feed_dict = {x: batch_x, y: batch_y}) # חישוב ממוצע של אובדן ממוצע_עלות + = c / total_batch # יומני תצוגה לכל שלב בעידן אם עידן% display_step == 0: correct_prediction = tf.equal (tf.argmax (pred, 1), tf.argmax (y, 1)) # חשב דיוק דיוק = tf.reduce_mean (tf.cast (korrekt_חיזוי, 'צף') ) acu_temp = accuracy.eval ({x: mnist.test.images, y: mnist.test.labels}) # הוסף את הדיוק לרשימת precision_history.append (acu_temp) # הוסף את היסטוריית העלויות cost_history.append (avg_cost) הדפס ('עידן:', '% 04d'% (עידן + 1), '- cost =', '{: .9f}'. פורמט (avg_cost), '- דיוק =', acu_temp) הדפס ('אופטימיזציה הסתיימה! ') # לשרטט את היסטוריית העלויות plt.plot (cost_history) plt.show () # לשרטט את היסטוריית הדיוק plt.plot (דיוק _היסטוריה) plt.show () # מודל בדיקה correct_prediction = tf.equal (tf.argmax (pred, 1), tf.argmax (y, 1)) # חשב דיוק דיוק = tf.reduce_mean (tf.cast (korrekt_ חיזוי, ' float ')) הדפס (' דיוק: ', precision.eval ({x: mnist.test.images, y: mnist.test.labels}))

תְפוּקָה:

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

אדוריקה אוצר על ידי אנשי מקצוע בתעשייה בהתאם לדרישות ודרישות התעשייה. תוכלו לשלוט במושגים כמו פונקציית SoftMax, Autoencoder Neural Networks, Restricted Boltzmann Machine (RBM) ולעבוד עם ספריות כמו Keras & TFLearn. הקורס אוצר במיוחד על ידי מומחים בתעשייה עם מחקרי מקרה בזמן אמת.

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