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