Corsi

Le seguenti classi sono disponibili a livello globale.

  • Un riferimento mutevole, condivisibile, proprietario di un tensore.

    Dichiarazione

    public final class Parameter<Scalar> where Scalar : TensorFlowScalar
    extension Parameter: CopyableToDevice
  • Classe che racchiude un puntatore C in un TensorHandle. Questa classe possiede TensorHandle ed è responsabile della sua distruzione.

    Dichiarazione

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

    Implementa l'algoritmo di ottimizzazione RMSProp. RMSProp è una forma di discesa del gradiente stocastica in cui i gradienti sono divisi per una media corrente della loro grandezza recente. RMSProp mantiene una media mobile del gradiente quadrato per ciascun peso.

    Riferimenti:

    Dichiarazione

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

    Implementa l'algoritmo di ottimizzazione AdaGrad (gradiente adattivo). AdaGrad ha tassi di apprendimento specifici per i parametri, che sono adattati in base alla frequenza con cui i parametri vengono aggiornati durante la formazione. I parametri che ricevono più aggiornamenti hanno tassi di apprendimento inferiori.

    AdaGrad adatta individualmente i tassi di apprendimento di tutti i parametri del modello ridimensionandoli in modo inversamente proporzionale alla radice quadrata della somma parziale dei quadrati delle norme del gradiente.

    Riferimento: "Metodi dei sottogradienti adattivi per l'apprendimento online e l'ottimizzazione stocastica" (Duchi et al, 2011)

    Dichiarazione

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

    Implementa l'algoritmo di ottimizzazione AdaDelta. AdaDelta è un metodo di discesa del gradiente stocastico basato sulle informazioni del primo ordine. Adatta i tassi di apprendimento in base a una finestra mobile di aggiornamenti dei gradienti, invece di accumulare tutti i gradienti passati. Pertanto, AdaDelta continua ad apprendere anche dopo aver effettuato numerosi aggiornamenti. Si adatta più velocemente alle mutevoli dinamiche dello spazio problematico di ottimizzazione.

    Riferimento: "ADADELTA: un metodo di tasso di apprendimento adattivo" (Zeiler, 2012)

    Dichiarazione

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

    Implementa l'algoritmo di ottimizzazione di Adam. Adam è un metodo stocastico di discesa del gradiente che calcola i tassi di apprendimento adattivo individuali per diversi parametri dalle stime dei momenti di primo e secondo ordine dei gradienti.

    Riferimento: "Adam: un metodo per l'ottimizzazione stocastica" (Kingma e Ba, 2014).

    Esempi:

    • Formare un semplice agente di apprendimento per rinforzo:
    ...
    // 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)
        ...
        }
    }
    
    • Formare una rete avversaria 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)
            }
    }       
    

    Dichiarazione

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

    Una variante di Adamo basata sulla norma dell'infinito.

    Riferimento: Sezione 7 di "Adam - Un metodo per l'ottimizzazione stocastica"

    Dichiarazione

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

    Questo algoritmo è una modifica di Adam con migliori proprietà di convergenza quando è vicino all'ottimale locale.

    Riferimento: “Sulla convergenza di Adamo e oltre”

    Dichiarazione

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

    Adam rettificato, una variante di Adam che introduce un termine per rettificare la varianza del tasso di apprendimento adattivo.

    Riferimento: “Sulla varianza del tasso di apprendimento adattivo e oltre”

    Dichiarazione

    public class RAdam<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Una sequenza infinita di raccolte di lotti di campioni adatta per addestrare una DNN quando i campioni non hanno dimensioni uniformi.

    I lotti in ogni epoca:

    • hanno tutti esattamente lo stesso numero di campioni.
    • sono formati da campioni di dimensioni simili.
    • iniziare con un lotto la cui dimensione massima del campione è la dimensione massima di tutti i campioni utilizzati nell'epoca.

    Dichiarazione

    public final class NonuniformTrainingEpochs<
      Samples: Collection,
      Entropy: RandomNumberGenerator
    >: Sequence, IteratorProtocol
  • Ottimizzatore generale che dovrebbe essere in grado di esprimere molteplici ottimizzazioni possibili. L'ottimizzatore è composto da una mappatura da ParametroGroup a ParametroGroupOptimizer. Questo ottimizzatore contiene anche il numero di elementi che lavorano in una somma di repliche incrociate. Questo serve per l'efficienza per prevenire più iterazioni inefficienti sul gradiente.

    Dichiarazione

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

    Un ottimizzatore di discesa del gradiente stocastico (SGD).

    Implementa l'algoritmo di discesa del gradiente stocastico con supporto per lo slancio, il decadimento del tasso di apprendimento e lo slancio di Nesterov. Il momento e il momento di Nesterov (noto anche come metodo del gradiente accelerato di Nesterov) sono metodi di ottimizzazione del primo ordine che possono migliorare la velocità di allenamento e il tasso di convergenza della discesa del gradiente.

    Riferimenti:

    Dichiarazione

    public class SGD<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Una sequenza infinita di raccolte di campioni batch adatte all'addestramento di una DNN quando i campioni sono uniformi.

    I lotti di ciascuna epoca hanno tutti esattamente la stessa dimensione.

    Dichiarazione

    public final class TrainingEpochs<
      Samples: Collection,
      Entropy: RandomNumberGenerator
    >: Sequence, IteratorProtocol
  • Dichiarazione

    public class EpochPipelineQueue
  • Lo stato di un ciclo di addestramento su un dispositivo.

    Dichiarazione

    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