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.
beyanname
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
Hamle
self
verilen yön boyunca. Riemannsal geometrisi, bu hareket, üstel fonksiyon, eşdeğerdirself
verilen teğet vektör boyunca jeodezik yüzeyi üzerinde.beyanname
mutating mutating func move(along direction: TangentVector)
Dan az gerekli bilgileri yakalayan, sıfır teğet vektörü üreten bir kapatma
self
.move(along: zeroTangentVectorInitializer())
değiştirmemelisinizself
.Bazı durumlarda, sıfır teğet vektör
self
eşittirTangentVector.zero
. Diğer durumlarda, sıfır tanjant vektör bilgilere bağlıself
örneğin bir n-boyutlu dizi türü için şekil olarak,. Türevlenebilir programlama için ise biraz daha bellek verimli özel tanımlamaktırzeroTangentVectorInitializer
yakalar ve kullanımları sadece gerekli bilgileri sıfır teğet vektörü oluşturmak için bir kapatma döndüren özelliği. Ö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) } } }
beyanname
var zeroTangentVectorInitializer: () -> TangentVector { get }
Bir teğet vektörü kullanılarak başlatıldı
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
değiştirmemelisinizself
.beyanname
var zeroTangentVector: TangentVector { get }
beyanname
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Türevinin verilen kapatma uygular
self
.İade
self
bir kimlik fonksiyonu gibi. Dönüş değeri, göre farklılaştığı bir bağlamda kullanıldığında, verilen kapanışı dönüş değerinin türevine uygular.beyanname
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
İade birinci kat giriş olması dışında, önceki katman çıkışına tabakalar bir sekans uygulanmasıyla hesaplanan çıkış
self
.beyanname
parametreler
l1
İlk katman.
l2
İkinci katman.
Geri dönüş değeri
Sıralı uygulamadan sonra son katmanın çıktısı.
İade birinci kat giriş olması dışında, önceki katman çıkışına tabakalar bir sekans uygulanmasıyla hesaplanan çıkış
self
.beyanname
parametreler
l1
İlk katman.
l2
İkinci katman.
l3
Üçüncü katman.
Geri dönüş değeri
Sıralı uygulamadan sonra son katmanın çıktısı.
İade birinci kat giriş olması dışında, önceki katman çıkışına tabakalar bir sekans uygulanmasıyla hesaplanan çıkış
self
.beyanname
parametreler
l1
İlk katman.
l2
İkinci katman.
l3
Üçüncü katman.
l4
Dördüncü katman.
Geri dönüş değeri
Sıralı uygulamadan sonra son katmanın çıktısı.
İade birinci kat giriş olması dışında, önceki katman çıkışına tabakalar bir sekans uygulanmasıyla hesaplanan çıkış
self
.beyanname
parametreler
l1
İlk katman.
l2
İkinci katman.
l3
Üçüncü katman.
l4
Üçüncü katman.
l5
Beşinci katman.
Geri dönüş değeri
Sıralı uygulamadan sonra son katmanın çıktısı.
İade birinci kat giriş olması dışında, önceki katman çıkışına tabakalar bir sekans uygulanmasıyla hesaplanan çıkış
self
.beyanname
@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.
Geri dönüş değeri
Sıralı uygulamadan sonra son katmanın çıktısı.