public protocol Differentiable
একটি প্রকার যা গাণিতিকভাবে একটি ভিন্নধর্মী বহুগুণের প্রতিনিধিত্ব করে যার স্পর্শীয় স্থানগুলি সীমিত-মাত্রিক।
একটি প্রকার যা একটি ভিন্ন মানের মান ডেরিভেটিভ উপস্থাপন করে।
গাণিতিকভাবে, এটি ডিফারেনশিয়াল টাইপ দ্বারা প্রতিনিধিত্ব করা ভিন্ন ভিন্ন বহুগুণের স্পর্শক বান্ডেলের সমতুল্য।
ঘোষণা
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
মানসম্পন্ন
self
দেওয়া দিক বরাবর। Riemannian জ্যামিতি, এই সূচকীয় মানচিত্র, যা চলে আসে সমতূল্যself
দেওয়া স্পর্শক ভেক্টর বরাবর geodesic পৃষ্ঠের উপর।ঘোষণা
mutating mutating func move(along direction: TangentVector)
একজন অবসান করে একটি শূন্য স্পর্শক ভেক্টর উৎপন্ন, থেকে ন্যূনতম প্রয়োজনীয় তথ্য ক্যাপচার
self
।move(along: zeroTangentVectorInitializer())
সংশোধন করা উচিত নয়self
।কিছু কিছু ক্ষেত্রে, এর শূন্য স্পর্শক ভেক্টর
self
সমানTangentVector.zero
। অন্যান্য ক্ষেত্রে, শূন্য স্পর্শক ভেক্টর তথ্যের উপর নির্ভরself
, যেমন একটি এন-মাত্রিক অ্যারে টাইপ জন্য আকৃতি হিসাবে। Differentiable প্রোগ্রামিং, এটি আরো মেমরি সাশ্রয়ী একটি কাস্টম সংজ্ঞায়িত হয়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
ষষ্ঠ স্তর।
ফেরত মূল্য
অনুক্রমিক প্রয়োগের পর চূড়ান্ত স্তরের আউটপুট।