کلاس ها

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

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

    اعلامیه

    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