Aulas

As seguintes classes estão disponíveis globalmente.

  • Uma referência mutável, compartilhável e proprietária de um tensor.

    Declaração

    public final class Parameter<Scalar> where Scalar : TensorFlowScalar
    extension Parameter: CopyableToDevice
  • Classe que envolve um ponteiro C para um TensorHandle. Esta classe possui o TensorHandle e é responsável por destruí-lo.

    Declaração

    public class TFETensorHandle : _AnyTensorHandle
    extension TFETensorHandle: Equatable
  • Um otimizador RMSProp.

    Implementa o algoritmo de otimização RMSProp. RMSProp é uma forma de descida gradiente estocástica onde os gradientes são divididos por uma média contínua de sua magnitude recente. RMSProp mantém uma média móvel do gradiente quadrado para cada peso.

    Referências:

    Declaração

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

    Implementa o algoritmo de otimização AdaGrad (gradiente adaptativo). O AdaGrad tem taxas de aprendizagem específicas de parâmetros, que são adaptadas em relação à frequência com que os parâmetros são atualizados durante o treinamento. Os parâmetros que recebem mais atualizações têm taxas de aprendizado menores.

    O AdaGrad adapta individualmente as taxas de aprendizagem de todos os parâmetros do modelo, escalando-os inversamente proporcionais à raiz quadrada da soma contínua dos quadrados das normas de gradiente.

    Referência: “Adaptive Métodos subgradiente para a aprendizagem online e estocásticos de otimização” (Duchi et al, 2011)

    Declaração

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

    Implementa o algoritmo de otimização AdaDelta. AdaDelta é um método de descida gradiente estocástico baseado nas informações de primeira ordem. Ele adapta as taxas de aprendizagem com base em uma janela móvel de atualizações de gradiente, em vez de acumular todos os gradientes anteriores. Assim, AdaDelta continua aprendendo mesmo quando muitas atualizações foram feitas. Ele se adapta mais rápido às mudanças na dinâmica do espaço do problema de otimização.

    Referência: “ADADELTA: Um Adaptive aprendizagem Método Rate” (Zeiler, 2012)

    Declaração

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

    Implementa o algoritmo de otimização de Adam. Adam é um método de descida gradiente estocástico que calcula taxas de aprendizagem adaptativa individuais para diferentes parâmetros de estimativas de momentos de primeira e segunda ordem dos gradientes.

    Referência: “Adam: Um método para Stochastic Optimization” (Kingma e Ba, 2014).

    Exemplos:

    • Treine um agente de aprendizagem por reforço simples:
    ...
    // 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)
        ...
        }
    }
    
    • Treine uma rede adversarial generativa (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)
            }
    }       
    

    Declaração

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

    Uma variante de Adão baseada na norma do infinito.

    Referência: Secção 7 do “Adam - Um método para Stochastic Otimização”

    Declaração

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

    Este algoritmo é uma modificação de Adam com melhores propriedades de convergência quando próximo a ótimos locais.

    Referência: “na convergência de Adam and Beyond”

    Declaração

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

    Adam retificado, uma variante de Adam que introduz um termo para retificar a variância da taxa de aprendizagem adaptativa.

    Referência: “On a variância da Adaptive Aprendizagem Taxa and Beyond”

    Declaração

    public class RAdam<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Uma sequência infinita de coleções de lotes de amostras adequadas para treinar um DNN quando as amostras não são uniformemente dimensionadas.

    Os lotes em cada época:

    • todos têm exatamente o mesmo número de amostras.
    • são formados a partir de amostras de tamanho semelhante.
    • comece com um lote cujo tamanho máximo de amostra é o tamanho máximo de todas as amostras usadas na época.

    Declaração

    public final class NonuniformTrainingEpochs<
      Samples: Collection,
      Entropy: RandomNumberGenerator
    >: Sequence, IteratorProtocol
  • Otimizador geral que deve ser capaz de expressar várias otimizações possíveis. O otimizador é composto de um mapeamento de ParameterGroup para ParameterGroupOptimizer. Este otimizador também contém o número de elementos trabalhando em uma soma de réplica cruzada. Isso é para eficiência para evitar várias iterações ineficientes no gradiente.

    Declaração

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

    Um otimizador de descida gradiente estocástico (SGD).

    Implementa o algoritmo de descida gradiente estocástico com suporte para momentum, diminuição da taxa de aprendizagem e momentum de Nesterov. Momentum e momentum de Nesterov (também conhecido como método de gradiente acelerado de Nesterov) são métodos de otimização de primeira ordem que podem melhorar a velocidade de treinamento e a taxa de convergência da descida do gradiente.

    Referências:

    Declaração

    public class SGD<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Uma sequência infinita de coleções de amostras de lote adequadas para treinar um DNN quando as amostras são uniformes.

    Todos os lotes em cada época têm exatamente o mesmo tamanho.

    Declaração

    public final class TrainingEpochs<
      Samples: Collection,
      Entropy: RandomNumberGenerator
    >: Sequence, IteratorProtocol
  • Declaração

    public class EpochPipelineQueue
  • O estado de um loop de treinamento em um dispositivo.

    Declaração

    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