Differenziabile

public protocol Differentiable

Un tipo che rappresenta matematicamente una varietà differenziabile i cui spazi tangenti sono di dimensione finita.

  • Un tipo che rappresenta le derivate di un valore differenziabile.

    Matematicamente, questo è equivalente al fibrato tangente della varietà differenziabile rappresentata dal tipo differenziabile.

    Dichiarazione

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • self muove lungo la direzione data. Nella geometria riemanniana ciò equivale alla mappa esponenziale, che self muove sulla superficie geodetica lungo il vettore tangente dato.

    Dichiarazione

    mutating mutating func move(along direction: TangentVector)
  • Una chiusura che produce un vettore tangente zero, catturando da self le informazioni minime necessarie.

    move(along: zeroTangentVectorInitializer()) non dovrebbe modificare self .

    In alcuni casi, il vettore tangente zero di self è uguale a TangentVector.zero . In altri casi, il vettore tangente zero dipende dalle informazioni in self , come la forma per un tipo di array n-dimensionale. Per la programmazione differenziabile, è più efficiente in termini di memoria definire una proprietà personalizzata zeroTangentVectorInitializer che restituisce una chiusura che acquisisce e utilizza solo le informazioni necessarie per creare un vettore tangente zero. Per esempio:

    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) }
        }
    }
    

    Dichiarazione

    var zeroTangentVectorInitializer: () -> TangentVector { get }
  • zeroVettoreTangente Metodo di estensione

    Un vettore tangente inizializzato utilizzando zeroTangentVectorInitializer . move(along: zeroTangentVector) non dovrebbe modificare self .

    Dichiarazione

    var zeroTangentVector: TangentVector { get }
  • conRecomputationInPullbacks(_:) Metodo di estensione

    Dichiarazione

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • conDerivativa(_:) Metodo di estensione

    Applica la chiusura data alla derivata di self .

    Restituisce self come una funzione di identità. Quando il valore restituito viene utilizzato in un contesto in cui è differenziato rispetto a, applica la chiusura data alla derivata del valore restituito.

    Dichiarazione

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • sequenziato(attraverso:_:) Metodo di estensione

    Restituisce l'output calcolato applicando una sequenza di livelli all'output del livello precedente, tranne per il fatto che l'input del primo livello è self .

    Dichiarazione

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

    Parametri

    l1

    Il primo strato.

    l2

    Il secondo strato.

    Valore restituito

    Il risultato dello strato finale dopo l'applicazione sequenziale.

  • sequenziato(attraverso:_:_:) Metodo di estensione

    Restituisce l'output calcolato applicando una sequenza di livelli all'output del livello precedente, tranne per il fatto che l'input del primo livello è self .

    Dichiarazione

    @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

    Parametri

    l1

    Il primo strato.

    l2

    Il secondo strato.

    l3

    Il terzo strato.

    Valore restituito

    Il risultato dello strato finale dopo l'applicazione sequenziale.

  • sequenziato(attraverso:_:_:_:) Metodo di estensione

    Restituisce l'output calcolato applicando una sequenza di livelli all'output del livello precedente, tranne per il fatto che l'input del primo livello è self .

    Dichiarazione

    @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

    Parametri

    l1

    Il primo strato.

    l2

    Il secondo strato.

    l3

    Il terzo strato.

    l4

    Il quarto strato.

    Valore restituito

    Il risultato dello strato finale dopo l'applicazione sequenziale.

  • sequenziato(attraverso:_:_:_:_:) Metodo di estensione

    Restituisce l'output calcolato applicando una sequenza di livelli all'output del livello precedente, tranne per il fatto che l'input del primo livello è self .

    Dichiarazione

    @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

    Parametri

    l1

    Il primo strato.

    l2

    Il secondo strato.

    l3

    Il terzo strato.

    l4

    Il terzo strato.

    l5

    Il quinto strato.

    Valore restituito

    Il risultato dello strato finale dopo l'applicazione sequenziale.

  • sequenziato(attraverso:_:_:_:_:_:) Metodo di estensione

    Restituisce l'output calcolato applicando una sequenza di livelli all'output del livello precedente, tranne per il fatto che l'input del primo livello è self .

    Dichiarazione

    @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

    Parametri

    l1

    Il primo strato.

    l2

    Il secondo strato.

    l3

    Il terzo strato.

    l4

    Il terzo strato.

    l5

    Il quinto strato.

    l6

    Il sesto strato.

    Valore restituito

    Il risultato dello strato finale dopo l'applicazione sequenziale.