متباين، متباين

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 }
  • this.zeroTangentVector طريقة التمديد

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

    تصريح

    var zeroTangentVector: TangentVector { get }
  • تصريح

    @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

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

    قيمة الإرجاع

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