גָזִיר

public protocol Differentiable

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

  • סוג המייצג נגזרות של ערך שניתן להבדיל.

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

    הַצהָרָה

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • מזיז self לאורך הכיוון הנתון. בגיאומטריה רימנית, זה שווה ערך למפה אקספוננציאלית, המניעה self על פני השטח הגיאודזי לאורך הווקטור המשיק הנתון.

    הַצהָרָה

    mutating mutating func move(along direction: TangentVector)
  • סגירה שמייצרת וקטור משיק אפס, לוכדת מידע הכרחי מינימלי self .

    move(along: zeroTangentVectorInitializer()) לא אמור לשנות self .

    במקרים מסוימים, וקטור המשיק אפס של self שווה ל- TangentVector.zero . במקרים אחרים, וקטור המשיק אפס תלוי במידע self , כגון צורה עבור סוג מערך n-ממדי. עבור תכנות שניתן להבדיל, יעיל יותר בזיכרון להגדיר מאפיין מותאם אישית zeroTangentVectorInitializer אשר מחזיר סגירה הלוכדת ומשתמשת רק במידע הדרוש ליצירת וקטור משיק אפס. לדוגמה:

    struct Vector {
        var scalars: [Float]
        var count: Int { scalars.count }
        init(scalars: [Float]) { ... }
        init(repeating repeatedElement: Float, count: Int) { ... }
    }
    
    extension Vector: AdditiveArithmetic { ... }
    
    extension Vector: Differentiable {
        typealias TangentVector = Vector
    
        @noDerivative
        var zeroTangentVectorInitializer: () -> TangentVector {
            let count = self.count
            return { TangentVector(repeating: 0, count: count) }
        }
    }
    

    הַצהָרָה

    var zeroTangentVectorInitializer: () -> TangentVector { get }
  • zeroTangentVector שיטת הרחבה

    וקטור משיק מאותחל באמצעות zeroTangentVectorInitializer . move(along: zeroTangentVector) לא אמור לשנות self .

    הַצהָרָה

    var zeroTangentVector: TangentVector { get }
  • withRecomputationInPullbacks(_:) שיטת הרחבה

    הַצהָרָה

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • withDerivative(_:) שיטת הרחבה

    מחיל את הסגירה הנתונה על הנגזרת של self .

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

    הַצהָרָה

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • רצף (דרך:_:) שיטת הרחבה

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

    הַצהָרָה

    @differentiable
    public func sequenced<L1: Layer, L2: Layer>(through l1: L1, _ l2: L2) -> L2.Output
    where L1.Input == Self, L1.Output == L2.Input

    פרמטרים

    l1

    השכבה הראשונה.

    l2

    השכבה השנייה.

    ערך החזרה

    הפלט של השכבה הסופית לאחר יישום רציף.

  • רצף (דרך:_:_:) שיטת הרחבה

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

    הַצהָרָה

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer>(through l1: L1, _ l2: L2, _ l3: L3)
      -> L3.Output
    where L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input

    פרמטרים

    l1

    השכבה הראשונה.

    l2

    השכבה השנייה.

    l3

    השכבה השלישית.

    ערך החזרה

    הפלט של השכבה הסופית לאחר יישום רציף.

  • רצף (דרך:_:_:_:) שיטת הרחבה

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

    הַצהָרָה

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4
    ) -> L4.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input,
      L3.Output == L4.Input

    פרמטרים

    l1

    השכבה הראשונה.

    l2

    השכבה השנייה.

    l3

    השכבה השלישית.

    l4

    השכבה הרביעית.

    ערך החזרה

    הפלט של השכבה הסופית לאחר יישום רציף.

  • רצף (דרך:_:_:_:_:) שיטת הרחבה

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

    הַצהָרָה

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer, L5: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5
    ) -> L5.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input,
      L4.Output == L5.Input

    פרמטרים

    l1

    השכבה הראשונה.

    l2

    השכבה השנייה.

    l3

    השכבה השלישית.

    l4

    השכבה השלישית.

    l5

    השכבה החמישית.

    ערך החזרה

    הפלט של השכבה הסופית לאחר יישום רציף.

  • רצף (דרך:_:_:_:_:_:) שיטת הרחבה

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

    הַצהָרָה

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer, L5: Layer, L6: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5, _ l6: L6
    ) -> L6.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input,
      L4.Output == L5.Input, L5.Output == L6.Input

    פרמטרים

    l1

    השכבה הראשונה.

    l2

    השכבה השנייה.

    l3

    השכבה השלישית.

    l4

    השכבה השלישית.

    l5

    השכבה החמישית.

    l6

    השכבה השישית.

    ערך החזרה

    הפלט של השכבה הסופית לאחר יישום רציף.