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
ষষ্ঠ স্তর।
রিটার্ন ভ্যালু
ক্রমিক প্রয়োগের পরে চূড়ান্ত স্তরের আউটপুট।