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
השכבה השישית.
ערך החזרה
הפלט של השכבה הסופית לאחר יישום רציף.