public protocol Differentiable
Teğet uzayları sonlu boyutlu olan türevlenebilir bir manifoldu matematiksel olarak temsil eden bir tür.
Türevlenebilir bir değerin türevlerini temsil eden bir tür.
Matematiksel olarak bu, türevlenebilir tip tarafından temsil edilen türevlenebilir manifoldun teğet demetine eşdeğerdir.
beyan
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
Verilen yön boyunca
self
hareket ettirir. Riemann geometrisinde bu, jeodezik yüzey üzerinde verilen teğet vektör boyuncaself
hareket ettiren üstel haritaya eşdeğerdir.beyan
mutating mutating func move(along direction: TangentVector)
self
minimum gerekli bilgiyi yakalayan, sıfır teğet vektör üreten bir kapatma.move(along: zeroTangentVectorInitializer())
self
değiştirmemelidir.Bazı durumlarda
self
sıfır teğet vektörüTangentVector.zero
eşittir. Diğer durumlarda, sıfır teğet vektörü, n boyutlu bir dizi türünün şekli gibiself
içindeki bilgilere bağlıdır. Türevlenebilir programlama için, sıfır teğet bir vektör oluşturmak için yalnızca gerekli bilgileri yakalayan ve kullanan bir kapatma döndüren özel birzeroTangentVectorInitializer
özelliği tanımlamak bellek açısından daha verimlidir. Örneğin: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) } } }
beyan
var zeroTangentVectorInitializer: () -> TangentVector { get }
zeroTangentVectorInitializer
kullanılarak başlatılan bir teğet vektör.move(along: zeroTangentVector)
self
değiştirmemelidir.beyan
var zeroTangentVector: TangentVector { get }
beyan
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Verilen kapanışı
self
türevine uygular.Bir kimlik işlevi gibi
self
döndürür. Dönüş değeri, kendisine göre farklılaştırıldığı bir bağlamda kullanıldığında, verilen kapanışı dönüş değerinin türevine uygular.beyan
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
İlk katmanın girişinin
self
olması dışında, önceki katmanın çıktısına bir dizi katman uygulanarak hesaplanan çıktıyı döndürür.beyan
Parametreler
l1
İlk katman.
l2
İkinci katman.
Dönüş Değeri
Sıralı uygulama sonrasında son katmanın çıktısı.
İlk katmanın girişinin
self
olması dışında, önceki katmanın çıktısına bir dizi katman uygulanarak hesaplanan çıktıyı döndürür.beyan
Parametreler
l1
İlk katman.
l2
İkinci katman.
l3
Üçüncü katman.
Dönüş Değeri
Sıralı uygulama sonrasında son katmanın çıktısı.
İlk katmanın girişinin
self
olması dışında, önceki katmanın çıktısına bir dizi katman uygulanarak hesaplanan çıktıyı döndürür.beyan
Parametreler
l1
İlk katman.
l2
İkinci katman.
l3
Üçüncü katman.
l4
Dördüncü katman.
Dönüş Değeri
Sıralı uygulama sonrasında son katmanın çıktısı.
İlk katmanın girişinin
self
olması dışında, önceki katmanın çıktısına bir dizi katman uygulanarak hesaplanan çıktıyı döndürür.beyan
Parametreler
l1
İlk katman.
l2
İkinci katman.
l3
Üçüncü katman.
l4
Üçüncü katman.
l5
Beşinci katman.
Dönüş Değeri
Sıralı uygulama sonrasında son katmanın çıktısı.
İlk katmanın girişinin
self
olması dışında, önceki katmanın çıktısına bir dizi katman uygulanarak hesaplanan çıktıyı döndürür.beyan
@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
Parametreler
l1
İlk katman.
l2
İkinci katman.
l3
Üçüncü katman.
l4
Üçüncü katman.
l5
Beşinci katman.
l6
Altıncı katman.
Dönüş Değeri
Sıralı uygulama sonrasında son katmanın çıktısı.