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 }
घोषणा
@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
है।घोषणा
पैरामीटर
l1
पहली परत.
l2
दूसरी परत.
वापसी मूल्य
क्रमिक अनुप्रयोग के बाद अंतिम परत का आउटपुट।
पिछली परत के आउटपुट पर परतों के अनुक्रम को लागू करके गणना किए गए आउटपुट को लौटाता है, सिवाय इसके कि पहली परत का इनपुट
self
है।घोषणा
पैरामीटर
l1
पहली परत.
l2
दूसरी परत.
l3
तीसरी परत.
वापसी मूल्य
क्रमिक अनुप्रयोग के बाद अंतिम परत का आउटपुट।
पिछली परत के आउटपुट पर परतों के अनुक्रम को लागू करके गणना किए गए आउटपुट को लौटाता है, सिवाय इसके कि पहली परत का इनपुट
self
है।घोषणा
पैरामीटर
l1
पहली परत.
l2
दूसरी परत.
l3
तीसरी परत.
l4
चौथी परत.
वापसी मूल्य
क्रमिक अनुप्रयोग के बाद अंतिम परत का आउटपुट।
पिछली परत के आउटपुट पर परतों के अनुक्रम को लागू करके गणना किए गए आउटपुट को लौटाता है, सिवाय इसके कि पहली परत का इनपुट
self
है।घोषणा
पैरामीटर
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
छठी परत.
वापसी मूल्य
क्रमिक अनुप्रयोग के बाद अंतिम परत का आउटपुट।