کلاس ها

کلاس های زیر در سطح جهانی در دسترس هستند.

  • یک مرجع قابل تغییر، قابل اشتراک و مالکیت به یک تانسور.

    اعلام

    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
  • بهینه ساز آدام.

    الگوریتم بهینه سازی آدام را پیاده سازی می کند. Adam یک روش نزولی گرادیان تصادفی است که نرخ‌های یادگیری تطبیقی ​​فردی را برای پارامترهای مختلف از برآورد لحظه‌های درجه اول و دوم گرادیان‌ها محاسبه می‌کند.

    مرجع: "آدام: روشی برای بهینه سازی تصادفی" (کینگما و با، 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
  • بهینه ساز AMSGrad.

    این الگوریتم اصلاحی از Adam با خواص همگرایی بهتر زمانی است که نزدیک به بهینه محلی است.

    مرجع: «درباره همگرایی آدم و فراتر از آن»

    اعلام

    public class AMSGrad<Model: Differentiable & KeyPathIterable>: Optimizer
    where
      Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions
        & KeyPathIterable,
      Model.TangentVector.VectorSpaceScalar == Float
  • بهینه ساز رادام

    Rectified Adam، گونه‌ای از 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).

    الگوریتم نزولی گرادیان تصادفی را با پشتیبانی از تکانه، کاهش نرخ یادگیری و تکانه نستروف پیاده‌سازی می‌کند. مومنتوم و تکانه نستروف (معروف به روش گرادیان شتابدار نستروف) روش های بهینه سازی مرتبه اول هستند که می توانند سرعت تمرین و نرخ همگرایی نزول گرادیان را بهبود بخشند.

    منابع:

    اعلام

    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