클래스

다음 클래스는 전역적으로 사용할 수 있습니다.

  • 텐서에 대한 변경 가능하고 공유 가능하며 소유한 참조입니다.

    선언

    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는 모든 모델 매개변수의 학습률을 그라디언트 노름의 누계 제곱합의 제곱근에 반비례하여 조정함으로써 개별적으로 조정합니다.

    참고 자료: "온라인 학습 및 확률론적 최적화를 위한 적응형 하위 그라데이션 방법" (Duchi et al, 2011)

    선언

    public class AdaGrad<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative
        & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • AdaDelta 최적화 프로그램.

    AdaDelta 최적화 알고리즘을 구현합니다. AdaDelta는 1차 정보를 기반으로 하는 확률적 경사하강법입니다. 과거의 모든 그라디언트를 누적하는 대신 그라디언트 업데이트의 이동 창을 기반으로 학습 속도를 조정합니다. 따라서 AdaDelta는 많은 업데이트가 수행된 경우에도 계속 학습합니다. 최적화 문제 공간의 변화하는 역학에 더 빠르게 적응합니다.

    참고: "ADADELTA: 적응형 학습률 방법" (Zeiler, 2012)

    선언

    public class AdaDelta<Model: Differentiable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative
        & ElementaryFunctions & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • 아담 옵티마이저.

    Adam 최적화 알고리즘을 구현합니다. Adam은 경사의 1차 및 2차 적률 추정치로부터 다양한 매개변수에 대한 개별 적응형 학습률을 계산하는 확률적 경사하강법 방법입니다.

    참조: "Adam: 확률론적 최적화를 위한 방법" (Kingma 및 Ba, 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 최적화 프로그램.

    무한대 규범을 기반으로 한 아담의 변형입니다.

    참조: "Adam - 확률론적 최적화 방법" 의 섹션 7

    선언

    public class AdaMax<Model: Differentiable & KeyPathIterable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • AMSGrad 최적화 프로그램.

    이 알고리즘은 로컬 최적값에 가까울 때 더 나은 수렴 속성을 갖는 Adam의 수정입니다.

    참조: “아담과 그 너머의 수렴에 대하여”

    선언

    public class AMSGrad<Model: Differentiable & KeyPathIterable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • RAdam 최적화 프로그램.

    적응형 학습률 차이를 수정하기 위한 용어를 도입한 Adam의 변형인 Rectified Adam입니다.

    참고: "적응 학습률과 그 이상의 변화에 ​​대하여"

    선언

    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

    SGD(확률적 경사하강법) 최적화 프로그램입니다.

    운동량, 학습률 감소 및 Nesterov 운동량을 지원하는 확률적 경사하강법 알고리즘을 구현합니다. 모멘텀 및 네스테로프 모멘텀(일명 네스테로프 가속 경사 방법)은 경사하강법의 훈련 속도와 수렴 속도를 향상시킬 수 있는 1차 최적화 방법입니다.

    참고자료:

    선언

    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