Las siguientes clases están disponibles a nivel mundial.
Una referencia mutable, compartible y propietaria de un tensor.
Declaración
public final class Parameter<Scalar> where Scalar : TensorFlowScalar
extension Parameter: CopyableToDevice
Clase que envuelve un puntero C a un TensorHandle. Esta clase es propietaria de TensorHandle y es responsable de destruirlo.
Declaración
public class TFETensorHandle : _AnyTensorHandle
extension TFETensorHandle: Equatable
Un optimizador RMSProp.
Implementa el algoritmo de optimización RMSProp. RMSProp es una forma de descenso de gradiente estocástico donde los gradientes se dividen por un promedio móvil de su magnitud reciente. RMSProp mantiene un promedio móvil del gradiente al cuadrado para cada peso.
Referencias:
- “Lecture 6,5 - rmsprop: Divida el gradiente por un promedio de funcionamiento de su reciente magnitud” (Tieleman y Hinton, 2012)
- “Generación de secuencias con redes neuronales recurrentes” (Graves, 2013)
Declaración
public class RMSProp<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
Un optimizador AdaGrad.
Implementa el algoritmo de optimización AdaGrad (gradiente adaptativo). AdaGrad tiene tasas de aprendizaje específicas de parámetros, que se adaptan en relación con la frecuencia con la que se actualizan los parámetros durante el entrenamiento. Los parámetros que reciben más actualizaciones tienen menores tasas de aprendizaje.
AdaGrad adapta individualmente las tasas de aprendizaje de todos los parámetros del modelo al escalarlos en forma inversamente proporcional a la raíz cuadrada de la suma de los cuadrados de las normas de gradiente.
Referencia: “Adaptive Métodos subgradiente para el aprendizaje en línea y la optimización estocástica” (Duchi et al, 2011)
Declaración
public class AdaGrad<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
Un optimizador AdaDelta.
Implementa el algoritmo de optimización AdaDelta. AdaDelta es un método de descenso de gradiente estocástico basado en la información de primer orden. Adapta las tasas de aprendizaje en función de una ventana móvil de actualizaciones de gradientes, en lugar de acumular todos los gradientes anteriores. Por lo tanto, AdaDelta continúa aprendiendo incluso cuando se han realizado muchas actualizaciones. Se adapta más rápidamente a la dinámica cambiante del espacio de problemas de optimización.
Referencia: “ADADELTA: Un método de aprendizaje adaptativo Rate” (Zeiler, 2012)
Declaración
public class AdaDelta<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
Optimizador de Adam.
Implementa el algoritmo de optimización de Adam. Adam es un método de descenso de gradiente estocástico que calcula las tasas de aprendizaje adaptativo individual para diferentes parámetros a partir de estimaciones de momentos de primer y segundo orden de los gradientes.
Referencia: “Adam: Un método para la optimización estocástica” (Kingma y Ba, 2014).
Ejemplos:
- Entrene a un simple agente de aprendizaje por refuerzo:
... // 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) ... } }
- Entrene una red generativa adversaria (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) } }
Declaración
public class Adam<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
Optimizador AdaMax.
Una variante de Adán basada en la norma infinita.
Referencia: Sección 7 de “Adam - Un método para la optimización estocástica”
Declaración
public class AdaMax<Model: Differentiable & KeyPathIterable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
Optimizador AMSGrad.
Este algoritmo es una modificación de Adam con mejores propiedades de convergencia cuando está cerca de los óptimos locales.
Referencia: “En la convergencia de Adán y más allá”
Declaración
public class AMSGrad<Model: Differentiable & KeyPathIterable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
Optimizador de RAdam.
Adam rectificado, una variante de Adam que introduce un término para rectificar la variación de la tasa de aprendizaje adaptativo.
Referencia: “En la varianza de la tasa de aprendizaje adaptativo y más allá”
Declaración
public class RAdam<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
Una secuencia infinita de colecciones de lotes de muestras adecuadas para entrenar un DNN cuando las muestras no tienen un tamaño uniforme.
Los lotes de cada época:
- todos tienen exactamente el mismo número de muestras.
- se forman a partir de muestras de tamaño similar.
- Comience con un lote cuyo tamaño máximo de muestra sea el tamaño máximo de todas las muestras utilizadas en la época.
Declaración
public final class NonuniformTrainingEpochs< Samples: Collection, Entropy: RandomNumberGenerator >: Sequence, IteratorProtocol
Optimizador general que debería poder expresar múltiples optimizaciones posibles. El optimizador se compone de una asignación de ParameterGroup a ParameterGroupOptimizer. Este optimizador también contiene el número de elementos que trabajan en una suma de réplicas cruzadas. Esto es por eficiencia para evitar múltiples iteraciones ineficientes sobre el gradiente.
Declaración
public class GeneralOptimizer<Model: EuclideanDifferentiable>: Optimizer where Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
Un optimizador de descenso de gradiente estocástico (SGD).
Implementa el algoritmo de descenso de gradiente estocástico con soporte para el impulso, el deterioro de la tasa de aprendizaje y el impulso de Nesterov. Momentum y Momentum Nesterov (también conocido como el método de gradiente acelerado de Nesterov) son métodos de optimización de primer orden que pueden mejorar la velocidad de entrenamiento y la tasa de convergencia del descenso de gradiente.
Referencias:
- “Un estocástico método de aproximación” (Robbins y Monro, 1951)
- “Relativa a la aproximación método estocástico de Robbins y Monro” (Wolfowitz, 1952)
- “Estocástico Estimación del máximo de una función de regresión” (Kiefer y Wolfowitz, 1952)
- “Algunos métodos de acelerar la convergencia del método de iteración” (Polyák, 1964)
- “Un método para el problema de la minimización convexa sin restricciones con la tasa de convergencia” (Nesterov, 1983)
Declaración
public class SGD<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
Una secuencia infinita de colecciones de muestras por lotes adecuadas para entrenar un DNN cuando las muestras son uniformes.
Todos los lotes de cada época tienen exactamente el mismo tamaño.
Declaración
public final class TrainingEpochs< Samples: Collection, Entropy: RandomNumberGenerator >: Sequence, IteratorProtocol
Declaración
public class EpochPipelineQueue