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