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