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 muoveself
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 leself
.In alcuni casi, lo zero tangente vettore di
self
è pari aTangentVector.zero
. In altri casi, il vettore nullo tangente dipende dalle informazioni inself
, come forma per un tipo di matrice n-dimensionale. Per la programmazione differenziabile, è più memoria-efficiente per definire una consuetudinezeroTangentVectorInitializer
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 }
Un vettore tangente inizializzato utilizzando
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
non dovrebbe modificareself
.Dichiarazione
var zeroTangentVector: TangentVector { get }
Dichiarazione
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
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
Restituisce l'output calcolato applicando una sequenza di strati all'uscita del livello precedente, tranne che l'ingresso del primo strato è
self
.Dichiarazione
Parametri
l1
Il primo strato.
l2
Il secondo strato.
Valore di ritorno
L'output del livello finale dopo l'applicazione sequenziale.
Restituisce l'output calcolato applicando una sequenza di strati all'uscita del livello precedente, tranne che l'ingresso del primo strato è
self
.Dichiarazione
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.
Restituisce l'output calcolato applicando una sequenza di strati all'uscita del livello precedente, tranne che l'ingresso del primo strato è
self
.Dichiarazione
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.
Restituisce l'output calcolato applicando una sequenza di strati all'uscita del livello precedente, tranne che l'ingresso del primo strato è
self
.Dichiarazione
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.
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.