Classes

Les cours suivants sont disponibles dans le monde entier.

  • Une référence mutable, partageable et propriétaire à un tenseur.

    Déclaration

    public final class Parameter<Scalar> where Scalar : TensorFlowScalar
    extension Parameter: CopyableToDevice
  • Classe encapsulant un pointeur C vers un TensorHandle. Cette classe possède le TensorHandle et est responsable de sa destruction.

    Déclaration

    public class TFETensorHandle : _AnyTensorHandle
    extension TFETensorHandle: Equatable
  • Un optimiseur RMSProp.

    Implémente l'algorithme d'optimisation RMSProp. RMSProp est une forme de descente de gradient stochastique où les gradients sont divisés par une moyenne mobile de leur ampleur récente. RMSProp conserve une moyenne mobile du carré du gradient pour chaque poids.

    Les références:

    Déclaration

    public class RMSProp<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative
        & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Un optimiseur AdaGrad.

    Implémente l'algorithme d'optimisation AdaGrad (gradient adaptatif). AdaGrad propose des taux d'apprentissage spécifiques aux paramètres, qui sont adaptés en fonction de la fréquence à laquelle les paramètres sont mis à jour pendant la formation. Les paramètres qui reçoivent davantage de mises à jour ont des taux d'apprentissage plus faibles.

    AdaGrad adapte individuellement les taux d'apprentissage de tous les paramètres du modèle en les mettant à l'échelle inversement proportionnelle à la racine carrée de la somme courante des carrés des normes de gradient.

    Référence : « Méthodes adaptatives de sous-gradient pour l'apprentissage en ligne et l'optimisation stochastique » (Duchi et al, 2011)

    Déclaration

    public class AdaGrad<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative
        & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Un optimiseur AdaDelta.

    Implémente l'algorithme d'optimisation AdaDelta. AdaDelta est une méthode de descente de gradient stochastique basée sur les informations du premier ordre. Il adapte les taux d'apprentissage en fonction d'une fenêtre mobile de mises à jour des dégradés, au lieu d'accumuler tous les dégradés passés. Ainsi, AdaDelta continue d'apprendre même lorsque de nombreuses mises à jour ont été effectuées. Il s'adapte plus rapidement à la dynamique changeante de l'espace des problèmes d'optimisation.

    Référence : « ADADELTA : Une méthode de taux d'apprentissage adaptatif » (Zeiler, 2012)

    Déclaration

    public class AdaDelta<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative
        & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Optimiseur Adam.

    Implémente l'algorithme d'optimisation Adam. Adam est une méthode de descente de gradient stochastique qui calcule les taux d'apprentissage adaptatifs individuels pour différents paramètres à partir d'estimations des moments de premier et de second ordre des gradients.

    Référence : « Adam : Une méthode d'optimisation stochastique » (Kingma et Ba, 2014).

    Exemples:

    • Former un agent d'apprentissage par renforcement simple :
    ...
    // Instantiate an agent's policy - approximated by the neural network (`net`) after defining it 
    in advance.
    var net = Net(observationSize: Int(observationSize), hiddenSize: hiddenSize, actionCount: actionCount)
    // Define the Adam optimizer for the network with a learning rate set to 0.01.
    let optimizer = Adam(for: net, learningRate: 0.01)
    ...
    // Begin training the agent (over a certain number of episodes).
    while true {
    ...
        // Implementing the gradient descent with the Adam optimizer:
        // Define the gradients (use withLearningPhase to call a closure under a learning phase).
        let gradients = withLearningPhase(.training) {
            TensorFlow.gradient(at: net) { net -> Tensor<Float> in
                // Return a softmax (loss) function
                return loss = softmaxCrossEntropy(logits: net(input), probabilities: target)
            }
        }
        // Update the differentiable variables of the network (`net`) along the gradients with the Adam 
    optimizer.
        optimizer.update(&net, along: gradients)
        ...
        }
    }
    
    • Former un réseau contradictoire génératif (GAN) :
    ...
    // Instantiate the generator and the discriminator networks after defining them.
    var generator = Generator()
    var discriminator = Discriminator()
    // Define the Adam optimizers for each network with a learning rate set to 2e-4 and beta1 - to 0.5.
    let adamOptimizerG = Adam(for: generator, learningRate: 2e-4, beta1: 0.5)
    let adamOptimizerD = Adam(for: discriminator, learningRate: 2e-4, beta1: 0.5)
    ...
    Start the training loop over a certain number of epochs (`epochCount`).
    for epoch in 1...epochCount {
        // Start the training phase.
        ...
        for batch in trainingShuffled.batched(batchSize) {
            // Implementing the gradient descent with the Adam optimizer:
            // 1) Update the generator.
            ...
            let 𝛁generator = TensorFlow.gradient(at: generator) { generator -> Tensor<Float> in
                ...
                return loss
                }
            // Update the differentiable variables of the generator along the gradients (`𝛁generator`) 
            // with the Adam optimizer.
            adamOptimizerG.update(&generator, along: 𝛁generator)
    
            // 2) Update the discriminator.
            ...
            let 𝛁discriminator = TensorFlow.gradient(at: discriminator) { discriminator -> Tensor<Float> in
                ...
                return loss
            }
            // Update the differentiable variables of the discriminator along the gradients (`𝛁discriminator`) 
            // with the Adam optimizer.
            adamOptimizerD.update(&discriminator, along: 𝛁discriminator)
            }
    }       
    

    Déclaration

    public class Adam<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative
        & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Optimiseur AdaMax.

    Une variante d'Adam basée sur la norme de l'infini.

    Référence : Section 7 de « Adam - Une méthode d'optimisation stochastique »

    Déclaration

    public class AdaMax<Model: Differentiable & KeyPathIterable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Optimiseur AMSGrad.

    Cet algorithme est une modification d'Adam avec de meilleures propriétés de convergence lorsqu'il est proche des optimums locaux.

    Référence : « Sur la convergence d’Adam et au-delà »

    Déclaration

    public class AMSGrad<Model: Differentiable & KeyPathIterable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Optimiseur RAdam.

    Adam rectifié, une variante d'Adam qui introduit un terme pour rectifier la variance du taux d'apprentissage adaptatif.

    Référence : « Sur la variance du taux d'apprentissage adaptatif et au-delà »

    Déclaration

    public class RAdam<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Une séquence infinie de collections de lots d'échantillons adaptée à la formation d'un DNN lorsque les échantillons ne sont pas de taille uniforme.

    Les lots à chaque époque :

    • tous ont exactement le même nombre d’échantillons.
    • sont formés à partir d’échantillons de taille similaire.
    • commencez par un lot dont la taille maximale de l’échantillon est la taille maximale de tous les échantillons utilisés à l’époque.

    Déclaration

    public final class NonuniformTrainingEpochs<
      Samples: Collection,
      Entropy: RandomNumberGenerator
    >: Sequence, IteratorProtocol
  • Optimiseur général qui doit être capable d'exprimer plusieurs optimisations possibles. L'optimiseur est composé d'un mappage de ParameterGroup vers ParameterGroupOptimizer. Cet optimiseur contient également le nombre d'éléments travaillant dans une somme de répliques croisées. C'est pour des raisons d'efficacité afin d'éviter plusieurs itérations inefficaces sur le dégradé.

    Déclaration

    public class GeneralOptimizer<Model: EuclideanDifferentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • SGD

    Un optimiseur de descente de gradient stochastique (SGD).

    Implémente l'algorithme de descente de gradient stochastique avec prise en charge de l'élan, de la décroissance du taux d'apprentissage et de l'élan de Nesterov. L'élan et l'élan Nesterov (alias la méthode du gradient accéléré Nesterov) sont des méthodes d'optimisation de premier ordre qui peuvent améliorer la vitesse d'entraînement et le taux de convergence de la descente du gradient.

    Les références:

    Déclaration

    public class SGD<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Une séquence infinie de collections d'échantillons par lots adaptée à la formation d'un DNN lorsque les échantillons sont uniformes.

    Les lots de chaque époque ont tous exactement la même taille.

    Déclaration

    public final class TrainingEpochs<
      Samples: Collection,
      Entropy: RandomNumberGenerator
    >: Sequence, IteratorProtocol
  • Déclaration

    public class EpochPipelineQueue
  • L'état d'une boucle d'entraînement sur un appareil.

    Déclaration

    public class ThreadState<Model: Layer, Opt: Optimizer>
    where
      Opt.Model == Model, Opt.Scalar == Float, Model.Input == Tensor<Float>,
      Model.Output == Tensor<Float>,
      Model.TangentVector.VectorSpaceScalar == Float