Rejoignez TensorFlow à Google I/O, du 11 au 12 mai. Inscrivez-vous maintenant

Différenciable

public protocol Differentiable

Un 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és 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
  • Se déplace self le long de la direction donnée. Dans la géométrie de Riemann, cela équivaut à la carte exponentielle, qui se déplace self sur la surface géodésique le long du vecteur de tangente donnée.

    Déclaration

    mutating mutating func move(along direction: TangentVector)
  • Dispositif de fermeture qui produit un vecteur tangent à zéro, capturant les informations nécessaires minimal de self .

    move(along: zeroTangentVectorInitializer()) le self move(along: zeroTangentVectorInitializer()) ne devrait pas modifier self - self .

    Dans certains cas, le vecteur tangent zéro self est égal à TangentVector.zero . Dans d' autres cas, le vecteur de tangente zéro dépend des informations en self , telles que la forme d'un type de réseau à n dimensions. Pour la programmation différentiables, il est plus efficace mémoire pour définir une coutume zeroTangentVectorInitializer propriété qui renvoie une fermeture qui capture et utilise uniquement les informations nécessaires pour créer un vecteur tangent zéro. 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 }
  • zéroTangenteVecteur

    Méthode d'extension

    Un vecteur tangent initialisé à l' aide zeroTangentVectorInitializer . move(along: zeroTangentVector) le self move(along: zeroTangentVector) ne devrait pas modifier self - self .

    Déclaration

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

    Méthode d'extension

    Déclaration

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

    Méthode d'extension

    Applique la fermeture donnée à la dérivée de self .

    Retours 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
  • séquencé (à travers:_:)

    Méthode d'extension

    Renvoie la sortie calculée en appliquant une séquence de couches à la sortie de la couche précédente, sauf que l'entrée de la première couche est self .

    Déclaration

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

    Paramètres

    l1

    La première couche.

    l2

    La deuxième couche.

    Valeur de retour

    La sortie de la couche finale après application séquentielle.

  • séquencé(à travers:_:_:)

    Méthode d'extension

    Renvoie la sortie calculée en appliquant une séquence de couches à la sortie de la couche précédente, sauf que l'entrée de la première couche est self .

    Déclaration

    @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

    Paramètres

    l1

    La première couche.

    l2

    La deuxième couche.

    l3

    La troisième couche.

    Valeur de retour

    La sortie de la couche finale après application séquentielle.

  • séquencé(à travers:_:_:_:)

    Méthode d'extension

    Renvoie la sortie calculée en appliquant une séquence de couches à la sortie de la couche précédente, sauf que l'entrée de la première couche est self .

    Déclaration

    @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

    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

    La sortie de la couche finale après application séquentielle.

  • séquencé(à travers:_:_:_:_:)

    Méthode d'extension

    Renvoie la sortie calculée en appliquant une séquence de couches à la sortie de la couche précédente, sauf que l'entrée de la première couche est self .

    Déclaration

    @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

    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

    La sortie de la couche finale après application séquentielle.

  • séquencé(à travers:_:_:_:_:_:)

    Méthode d'extension

    Renvoie la sortie calculée en appliquant une séquence de couches à la sortie de la couche précédente, sauf que l'entrée de la première couche 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

    La sortie de la couche finale après application séquentielle.