Классы

Следующие классы доступны по всему миру.

  • Изменяемая, совместно используемая, владеющая ссылкой на тензор.

    Декларация

    public final class Parameter<Scalar> where Scalar : TensorFlowScalar
    extension Parameter: CopyableToDevice
  • Класс, оборачивающий указатель C на TensorHandle. Этот класс владеет TensorHandle и отвечает за его уничтожение.

    Декларация

    public class TFETensorHandle : _AnyTensorHandle
    extension TFETensorHandle: Equatable
  • Оптимизатор RMSProp.

    Реализует алгоритм оптимизации RMSProp. RMSProp — это форма стохастического градиентного спуска, при которой градиенты делятся на скользящее среднее их недавней величины. RMSProp сохраняет скользящее среднее квадрата градиента для каждого веса.

    Использованная литература:

    Декларация

    public class RMSProp<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative
        & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Оптимизатор AdaGrad.

    Реализует алгоритм оптимизации AdaGrad (адаптивный градиент). AdaGrad имеет скорость обучения для конкретных параметров, которая адаптируется в зависимости от того, как часто параметры обновляются во время обучения. Параметры, которые получают больше обновлений, имеют меньшую скорость обучения.

    AdaGrad индивидуально адаптирует скорость обучения всех параметров модели, масштабируя их обратно пропорционально квадратному корню из текущей суммы квадратов норм градиента.

    Ссылка: «Адаптивные субградиентные методы для онлайн-обучения и стохастической оптимизации» (Дучи и др., 2011).

    Декларация

    public class AdaGrad<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative
        & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Оптимизатор AdaDelta.

    Реализует алгоритм оптимизации AdaDelta. AdaDelta — это метод стохастического градиентного спуска, основанный на информации первого порядка. Он адаптирует скорость обучения на основе движущегося окна обновлений градиента, вместо того, чтобы накапливать все прошлые градиенты. Таким образом, AdaDelta продолжает обучение, даже если было сделано много обновлений. Он быстрее адаптируется к изменяющейся динамике оптимизационного пространства.

    Ссылка: «ADADELTA: метод адаптивной скорости обучения» (Zeiler, 2012).

    Декларация

    public class AdaDelta<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative
        & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Адам оптимизатор.

    Реализует алгоритм оптимизации Адама. Адам — это метод стохастического градиентного спуска, который вычисляет индивидуальные скорости адаптивного обучения для различных параметров на основе оценок моментов градиентов первого и второго порядка.

    Ссылка: «Адам: метод стохастической оптимизации» (Кингма и Ба, 2014).

    Примеры:

    • Обучите простого агента обучения с подкреплением:
    ...
    // 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)
        ...
        }
    }
    
    • Обучите генеративно-состязательную сеть (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)
            }
    }       
    

    Декларация

    public class Adam<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative
        & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Оптимизатор AdaMax.

    Вариант Адама, основанный на норме бесконечности.

    Ссылка: Раздел 7 книги «Адам — метод стохастической оптимизации».

    Декларация

    public class AdaMax<Model: Differentiable & KeyPathIterable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Оптимизатор АМСГрад.

    Этот алгоритм представляет собой модификацию Адама с лучшими свойствами сходимости при приближении к локальному оптимуму.

    Ссылка: «О сближении Адама и за его пределами».

    Декларация

    public class AMSGrad<Model: Differentiable & KeyPathIterable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Оптимизатор РАдам.

    Исправленный Адам, вариант Адама, который вводит термин для исправления отклонения скорости адаптивного обучения.

    Ссылка: «О дисперсии скорости адаптивного обучения и не только»

    Декларация

    public class RAdam<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Бесконечная последовательность наборов пакетов образцов, подходящая для обучения DNN, когда образцы не имеют одинакового размера.

    Партии в каждой эпохе:

    • все имеют одинаковое количество образцов.
    • формируются из образцов одинакового размера.
    • начните с партии, максимальный размер выборки которой равен максимальному размеру всех выборок, использованных в эпоху.

    Декларация

    public final class NonuniformTrainingEpochs<
      Samples: Collection,
      Entropy: RandomNumberGenerator
    >: Sequence, IteratorProtocol
  • Общий оптимизатор, который должен иметь возможность выражать несколько возможных оптимизаций. Оптимизатор состоит из сопоставления ParameterGroup с ParameterGroupOptimizer. Этот оптимизатор также содержит количество элементов, работающих в сумме перекрестных реплик. Это сделано для повышения эффективности, чтобы предотвратить несколько неэффективных итераций по градиенту.

    Декларация

    public class GeneralOptimizer<Model: EuclideanDifferentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Оптимизатор стохастического градиентного спуска (SGD).

    Реализует алгоритм стохастического градиентного спуска с поддержкой импульса, затухания скорости обучения и импульса Нестерова. Импульс и импульс Нестерова (также известный как метод ускоренного градиента Нестерова) — это методы оптимизации первого порядка, которые могут улучшить скорость обучения и скорость сходимости градиентного спуска.

    Использованная литература:

    Декларация

    public class SGD<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • Бесконечная последовательность наборов пакетных выборок, подходящая для обучения DNN, когда выборки однородны.

    Все партии в каждую эпоху имеют одинаковый размер.

    Декларация

    public final class TrainingEpochs<
      Samples: Collection,
      Entropy: RandomNumberGenerator
    >: Sequence, IteratorProtocol
  • Декларация

    public class EpochPipelineQueue
  • Состояние цикла обучения на устройстве.

    Декларация

    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