احضر ندوة النساء في غسل الأموال في 7 ديسمبر. سجل الآن

قابل للتفاضل

public protocol Differentiable

نوع يمثل رياضيًا متشعبًا قابلًا للتفاضل تكون مسافاته المماسية ذات أبعاد محدودة.

  • نوع يمثل مشتقات قيمة قابلة للتفاضل.

    رياضيا ، هذا يعادل الحزمة المماس للمشعب التفاضلي الذي يمثله النوع القابل للتفاضل.

    إعلان

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • التحركات self على طول اتجاه معين. في هندسة ريمان، وهذا هو ما يعادل خريطة الأسي، والتي تتحرك self على سطح الجيوديسية على طول متجه المماس معين.

    إعلان

    mutating mutating func move(along direction: TangentVector)
  • A الإغلاق التي تنتج ناقلات الصفر الظل، واستولت على المعلومات اللازمة الحد الأدنى من self .

    move(along: zeroTangentVectorInitializer()) لا ينبغي تعديل self .

    في بعض الحالات، وناقلات الصفر الظل من self يساوي TangentVector.zero . وفي حالات أخرى، وناقلات الصفر الظل يعتمد على المعلومات في self ، مثل شكل لنوع مصفوفة ن الأبعاد. للبرمجة للاختلاف، فمن المزيد من الذاكرة فعالة لتحديد مخصص 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 }
  • صفرTangentVector

    طريقة التمديد

    A متجه المماس تهيئة باستخدام zeroTangentVectorInitializer . move(along: zeroTangentVector) يجب أن لا تعديل self .

    إعلان

    var zeroTangentVector: TangentVector { get }
  • withRecomputationInPullbacks (_ :)

    طريقة التمديد

    إعلان

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • مع مشتق (_ :)

    طريقة التمديد

    ينطبق إغلاق الممنوحة للمشتق من 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

    الطبقة السادسة.

    قيمة الإرجاع

    إخراج الطبقة النهائية بعد التطبيق المتسلسل.