בדיוק כפי 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, מקובצות לפי אזורים פונקציונליים:
הגדלה
קונבולציה
- Conv1D
- Conv2D
- Conv3D
- צָפוּף
- DepthwiseConv2D
- SeparableConv1D
- SeparableConv2D
- TransposedConv1D
- TransposedConv2D
- TransposedConv3D
- ZeroPadding1D
- ZeroPadding2D
- ZeroPadding3D
הטבעה
מורפולוגי
נוֹרמָלִיזָצִיָה
איגום
- AvgPool1D
- AvgPool2D
- AvgPool3D
- MaxPool1D
- MaxPool2D
- MaxPool3D
- FractionalMaxPool2D
- GlobalAvgPool1D
- GlobalAvgPool2D
- GlobalAvgPool3D
- GlobalMaxPool1D
- GlobalMaxPool2D
- GlobalMaxPool3D
רשתות עצביות חוזרות
עיצוב מחדש
Upsampling
מייעלים
כלי אופטימיזציה הם מרכיב מרכזי באימון של מודל למידת מכונה, מעדכנים את המודל על סמך שיפוע מחושב. עדכונים אלה באופן אידיאלי יתאימו את הפרמטרים של המודל באופן שיכשיר את המודל.
כדי להשתמש בכלי אופטימיזציה, אתחל אותו תחילה עבור מודל יעד עם פרמטרי אימון מתאימים:
let optimizer = RMSProp(for: model, learningRate: 0.0001, decay: 1e-6)
אמן מודל על ידי השגת שיפוע ביחס לקלט ופונקציית אובדן, ולאחר מכן עדכן את המודל לאורך שיפוע זה באמצעות האופטימיזציה שלך:
optimizer.update(&model, along: gradients)
מייעלים מובנים
מספר מייעלים נפוצים מסופקים על ידי Swift עבור TensorFlow. אלה כוללים את הדברים הבאים: