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 }
تمت تهيئة متجه الظل باستخدام
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
الطبقة السادسة .
قيمة الإرجاع
إخراج الطبقة النهائية بعد التطبيق المتسلسل.