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