türevlenebilir

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ğerdir self 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ştirmemelisiniz self .

    Bazı durumlarda, sıfır teğet vektör self eşittir TangentVector.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ır zeroTangentVectorInitializer 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 }
  • sıfırTanjantVektör

    Uzatma yöntemi

    Bir teğet vektörü kullanılarak başlatıldı zeroTangentVectorInitializer . move(along: zeroTangentVector) değiştirmemelisiniz self .

    beyanname

    var zeroTangentVector: TangentVector { get }
  • beyanname

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • türev(_:) ile

    Uzatma yöntemi

    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

    @differentiable
    public func sequenced<L1: Layer, L2: Layer>(through l1: L1, _ l2: L2) -> L2.Output
    where L1.Input == Self, L1.Output == L2.Input

    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

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer>(through l1: L1, _ l2: L2, _ l3: L3)
      -> L3.Output
    where L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input

    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

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4
    ) -> L4.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input,
      L3.Output == L4.Input

    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

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer, L5: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5
    ) -> L5.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input,
      L4.Output == L5.Input

    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ı.