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, cheself
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 modificareself
.In alcuni casi, il vettore tangente zero di
self
è uguale aTangentVector.zero
. In altri casi, il vettore tangente zero dipende dalle informazioni inself
, come la forma per un tipo di array n-dimensionale. Per la programmazione differenziabile, è più efficiente in termini di memoria definire una proprietà personalizzatazeroTangentVectorInitializer
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 }
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
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
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
Parametri
l1
Il primo strato.
l2
Il secondo strato.
Valore restituito
Il risultato dello strato finale dopo l'applicazione sequenziale.
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
Parametri
l1
Il primo strato.
l2
Il secondo strato.
l3
Il terzo strato.
Valore restituito
Il risultato dello strato finale dopo l'applicazione sequenziale.
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
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.
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
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.
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.