מה זה 'from_logits=True' בפונקציות אובדן Keras/TensorFlow? PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

מה זה 'from_logits=True' בפונקציות אובדן Keras/TensorFlow?

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

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

loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)

loss = keras.losses.SparseCategoricalCrossentropy(from_logits=False)

מה עושה from_logits דגל מתייחס?

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

לוגיטים ו-SoftMax הסתברויות

בקיצור:

ההסתברויות מנורמלות - כלומר יש טווח בין [0..1]. לוגיטים אינם מנורמלים, ויכול להיות טווח בין [-inf...+inf].

בהתאם לשכבת הפלט של הרשת שלך:

output = keras.layers.Dense(n, activation='softmax')(x)

output = keras.layers.Dense(n)(x)

התפוקה של Dense שכבה תהיה או לַחֲזוֹר:

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

תפיסה שגויה זו נובעת אולי מהתחביר הקצר המאפשר לך להוסיף הפעלה לשכבה, לִכאוֹרָה כשכבה אחת, למרות שזה רק קיצור של:

output = keras.layers.Dense(n, activation='softmax')(x)

dense = keras.layers.Dense(n)(x)
output = keras.layers.Activation('softmax')(dense)

יש ליידע את פונקציית ההפסד שלך אם היא צריכה לצפות להתפלגות מנורמלת (פלט שעבר דרך פונקציית SoftMax) או לוגיטים. לפיכך, ה from_logits דֶגֶל!

מתי צריך from_logits=נכון?

אם הרשת שלך מנרמלת את הסתברויות הפלט, פונקציית ההפסד שלך צריכה להגדיר from_logits ל False, מכיוון שהוא לא מקבל לוגיטים. זהו גם ערך ברירת המחדל של כל מחלקות ההפסד שמקבלות את הדגל, מכיוון שרוב האנשים מוסיפים an activation='softmax' לשכבות הפלט שלהם:

model = keras.Sequential([
    keras.layers.Input(shape=(10, 1)),
    
    keras.layers.Dense(10, activation='softmax') 
])

input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)

זו התוצאה:

tf.Tensor(
[[[0.12467965 0.10423233 0.10054766 0.09162105 0.09144577 0.07093797
   0.12523937 0.11292477 0.06583504 0.11253635]]], shape=(1, 1, 10), dtype=float32)

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

מצד שני, אם הרשת שלך לא מיישמת SoftMax על הפלט:

model = keras.Sequential([
    keras.layers.Input(shape=(10, 1)),
    
    keras.layers.Dense(10)
])

input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)

זו התוצאה:

tf.Tensor(
[[[-0.06081138  0.04154852  0.00153442  0.0705068  -0.01139916
    0.08506121  0.1211026  -0.10112958 -0.03410497  0.08653068]]], shape=(1, 1, 10), dtype=float32)

תצטרך להגדיר from_logits ל True לפונקציית ההפסד לטפל כראוי בתפוקות.

מתי להשתמש ב-SoftMax על הפלט?

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

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

עם זאת, אם אתה צופה בלוגיטים, חלץ את ה-Top-K (כאשר K יכול להיות כל מספר אבל הוא בדרך כלל איפשהו בין [0...10]), ורק אז החלת SoftMax על top-k אסימונים אפשריים באוצר המילים משנים את התפלגות באופן משמעותי, ובדרך כלל מייצרים תוצאות מציאותיות יותר.

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

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

הולך רחוק יותר - למידה עמוקה מעשית לראייה ממוחשבת

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

עוד קורס ראיית מחשב?

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

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

מה יש בפנים?

  • העקרונות הראשונים של חזון וכיצד ניתן ללמד מחשבים "לראות"
  • משימות ויישומים שונים של ראייה ממוחשבת
  • כלי המקצוע שיקלו עליכם את העבודה
  • מציאת, יצירה וניצול של מערכי נתונים עבור ראייה ממוחשבת
  • התיאוריה והיישום של רשתות עצביות קונבולוציונליות
  • טיפול בהסטת תחום, התרחשות משותפת והטיות אחרות במערך נתונים
  • העבר למידה וניצול זמן ההדרכה ומשאבי החישוב של אחרים לטובתך
  • בנייה והדרכה של סיווג סרטן שד חדיש
  • כיצד ליישם מנה בריאה של ספקנות על רעיונות מיינסטרים ולהבין את ההשלכות של טכניקות מאומצות באופן נרחב
  • הדמיית "מרחב הקונספט" של ConvNet באמצעות t-SNE ו-PCA
  • תיאורי מקרה של האופן שבו חברות משתמשות בטכניקות ראייה ממוחשבת כדי להשיג תוצאות טובות יותר
  • הערכת מודל נכונה, הדמיית מרחב סמוי וזיהוי תשומת הלב של המודל
  • ביצוע מחקר תחום, עיבוד מערכי נתונים משלך והקמת בדיקות מודל
  • ארכיטקטורות חדשניות, התקדמות רעיונות, מה מייחד אותם וכיצד ליישם אותם
  • KerasCV – ספריית WIP ליצירת צינורות ודגמים מתקדמים
  • כיצד לנתח ולקרוא מאמרים וליישם אותם בעצמך
  • בחירת דגמים בהתאם ליישום שלך
  • יצירת צינור למידת מכונה מקצה לקצה
  • נוף ואינטואיציה על זיהוי אובייקטים עם R-CNN מהירים יותר, RetinaNets, SSDs ו-YOLO
  • מופע ופילוח סמנטי
  • זיהוי אובייקטים בזמן אמת עם YOLOv5
  • הכשרת גלאי אובייקטים של YOLOv5
  • עבודה עם רובוטריקים באמצעות KerasNLP (ספריית WIP בעלת חוזק בתעשייה)
  • שילוב רובוטריקים עם ConvNets ליצירת כיתובים של תמונות
  • חלום עמוק

סיכום

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

ייתכן שהבלבול נובע מהתחביר הקצר המאפשר הוספת שכבות הפעלה על גבי שכבות אחרות, במסגרת ההגדרה של שכבה עצמה. סוף סוף בדקנו מתי יש להגדיר את הטיעון True or False, ומתי יש להשאיר פלט כ-logits או לעבור דרך פונקציית הפעלה כגון SoftMax.

בול זמן:

עוד מ Stackabuse