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
ชั้นที่หก.
ค่าส่งคืน
ผลลัพธ์ของชั้นสุดท้ายหลังการใช้ตามลำดับ