Partecipa al simposio Women in ML il 7 dicembre Registrati ora

differenziabile

public protocol Differentiable

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

  • Un tipo che rappresenta i derivati ​​di un valore differenziabile.

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

    Dichiarazione

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • Muove self lungo la direzione data. In geometria riemanniana, questo è equivalente alla mappa esponenziale, che si muove self sulla superficie geodetica lungo il dato vettore tangente.

    Dichiarazione

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

    move(along: zeroTangentVectorInitializer()) non deve modificare le self .

    In alcuni casi, lo zero tangente vettore di self è pari a TangentVector.zero . In altri casi, il vettore nullo tangente dipende dalle informazioni in self , come forma per un tipo di matrice n-dimensionale. Per la programmazione differenziabile, è più memoria-efficiente per definire una consuetudine zeroTangentVectorInitializer proprietà che restituisce una chiusura che cattura e utilizza solo le informazioni necessarie per creare un vettore nullo tangente. 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 }
  • zeroTangenteVettore

    Metodo di estensione

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

    Dichiarazione

    var zeroTangentVector: TangentVector { get }
  • withRecomputationInPullbacks(_:)

    Metodo di estensione

    Dichiarazione

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • conDerivata(_:)

    Metodo di estensione

    Vale la chiusura dato al derivato di self .

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

    Dichiarazione

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • in sequenza (tramite:_:)

    Metodo di estensione

    Restituisce l'output calcolato applicando una sequenza di strati all'uscita del livello precedente, tranne che l'ingresso del primo strato è 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 di ritorno

    L'output del livello finale dopo l'applicazione sequenziale.

  • in sequenza (tramite:_:_:)

    Metodo di estensione

    Restituisce l'output calcolato applicando una sequenza di strati all'uscita del livello precedente, tranne che l'ingresso del primo strato è 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 di ritorno

    L'output del livello finale dopo l'applicazione sequenziale.

  • in sequenza (tramite:_:_:_:)

    Metodo di estensione

    Restituisce l'output calcolato applicando una sequenza di strati all'uscita del livello precedente, tranne che l'ingresso del primo strato è 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 di ritorno

    L'output del livello finale dopo l'applicazione sequenziale.

  • in sequenza (tramite:_:_:_:_:)

    Metodo di estensione

    Restituisce l'output calcolato applicando una sequenza di strati all'uscita del livello precedente, tranne che l'ingresso del primo strato è 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 di ritorno

    L'output del livello finale dopo l'applicazione sequenziale.

  • in sequenza (tramite:_:_:_:_:_:)

    Metodo di estensione

    Restituisce l'output calcolato applicando una sequenza di strati all'uscita del livello precedente, tranne che l'ingresso del primo strato è 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 di ritorno

    L'output del livello finale dopo l'applicazione sequenziale.