public protocol Differentiable
Type qui représente mathématiquement une variété différentiable dont les espaces tangents sont de dimension finie.
Un type représentant les dérivées d'une valeur différentiable.
Mathématiquement, cela équivaut au fibré tangent de la variété différentiable représenté par le type différentiable.
Déclaration
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
self
déplace dans la direction donnée. En géométrie riemannienne, cela équivaut à une carte exponentielle, quiself
déplace sur la surface géodésique le long du vecteur tangent donné.Déclaration
mutating mutating func move(along direction: TangentVector)
Une fermeture qui produit un vecteur tangent nul, capturant le minimum d'informations nécessaires de
self
.move(along: zeroTangentVectorInitializer())
ne devrait pas se modifierself
.Dans certains cas, le vecteur tangent zéro de
self
est égal àTangentVector.zero
. Dans d'autres cas, le vecteur tangent zéro dépend des informations contenues dansself
, telles que la forme d'un type de tableau à n dimensions. Pour la programmation différenciable, il est plus efficace en termes de mémoire de définir une propriété personnaliséezeroTangentVectorInitializer
qui renvoie une fermeture qui capture et utilise uniquement les informations nécessaires pour créer un vecteur tangent nul. Par exemple: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) } } }
Déclaration
var zeroTangentVectorInitializer: () -> TangentVector { get }
Un vecteur tangent initialisé à l'aide
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
ne doit pas se modifierself
.Déclaration
var zeroTangentVector: TangentVector { get }
Déclaration
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Applique la fermeture donnée à la dérivée de
self
.Renvoie
self
comme une fonction d'identité. Lorsque la valeur de retour est utilisée dans un contexte où elle est différenciée par rapport à, applique la fermeture donnée à la dérivée de la valeur de retour.Déclaration
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Renvoie la sortie calculée en appliquant une séquence de calques à la sortie du calque précédent, sauf que l'entrée du premier calque est
self
.Déclaration
Paramètres
l1
La première couche.
l2
La deuxième couche.
Valeur de retour
Sortie de la couche finale après application séquentielle.
Renvoie la sortie calculée en appliquant une séquence de calques à la sortie du calque précédent, sauf que l'entrée du premier calque est
self
.Déclaration
Paramètres
l1
La première couche.
l2
La deuxième couche.
l3
La troisième couche.
Valeur de retour
Sortie de la couche finale après application séquentielle.
Renvoie la sortie calculée en appliquant une séquence de calques à la sortie du calque précédent, sauf que l'entrée du premier calque est
self
.Déclaration
Paramètres
l1
La première couche.
l2
La deuxième couche.
l3
La troisième couche.
l4
La quatrième couche.
Valeur de retour
Sortie de la couche finale après application séquentielle.
Renvoie la sortie calculée en appliquant une séquence de calques à la sortie du calque précédent, sauf que l'entrée du premier calque est
self
.Déclaration
Paramètres
l1
La première couche.
l2
La deuxième couche.
l3
La troisième couche.
l4
La troisième couche.
l5
La cinquième couche.
Valeur de retour
Sortie de la couche finale après application séquentielle.
Renvoie la sortie calculée en appliquant une séquence de calques à la sortie du calque précédent, sauf que l'entrée du premier calque est
self
.Déclaration
@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
Paramètres
l1
La première couche.
l2
La deuxième couche.
l3
La troisième couche.
l4
La troisième couche.
l5
La cinquième couche.
l6
La sixième couche.
Valeur de retour
Sortie de la couche finale après application séquentielle.