שכבות

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

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

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

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

כדי להגדיר Layer מותאמת אישית עבור דגם או פעולה משלך, בדרך כלל תפעל לפי תבנית דומה לזה:

public struct MyModel: Layer {
  // Define your layers or other properties here.

  // A custom initializer may be desired to configure the model.
  public init() {}

  @differentiable
  public func callAsFunction(_ input: Tensor<Float>) -> Tensor<Float> {
    // Define the sequence of operations performed on model input to arrive at the output.
    return ...
  }
}

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

שכבות מובנות

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

הגדלה

קונבולציה

הטבעה

מורפולוגי

נוֹרמָלִיזָצִיָה

איגום

רשתות עצביות חוזרות

עיצוב מחדש

Upsampling

מייעלים

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

כדי להשתמש בכלי אופטימיזציה, אתחל אותו תחילה עבור מודל יעד עם פרמטרי אימון מתאימים:

let optimizer = RMSProp(for: model, learningRate: 0.0001, decay: 1e-6)

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

optimizer.update(&model, along: gradients)

מייעלים מובנים

מספר מייעלים נפוצים מסופקים על ידי Swift עבור TensorFlow. אלה כוללים את הדברים הבאים: