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
لایه ششم.
ارزش بازگشتی
خروجی لایه نهایی پس از اعمال متوالی.