विभेदक

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 में जानकारी पर निर्भर करता है, जैसे एन-आयामी सरणी प्रकार के लिए आकार। अलग-अलग प्रोग्रामिंग के लिए, एक कस्टम 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 }
  • जीरो टैंगेंटवेक्टर विस्तार विधि

    zeroTangentVectorInitializer का उपयोग करके एक स्पर्शरेखा वेक्टर प्रारंभ किया गया। move(along: zeroTangentVector) self संशोधित नहीं करना चाहिए।

    घोषणा

    var zeroTangentVector: TangentVector { get }
  • withRecomputationInPullbacks(_:) विस्तार विधि

    घोषणा

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • withव्युत्पन्न(_:) विस्तार विधि

    दिए गए समापन को 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

    छठी परत.

    वापसी मूल्य

    क्रमिक अनुप्रयोग के बाद अंतिम परत का आउटपुट।