کلاس های زیر در سطح جهانی در دسترس هستند.
یک مرجع قابل تغییر، قابل اشتراک و مالکیت به یک تانسور.
اعلامیه
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 میانگین متحرک گرادیان مجذور را برای هر وزن نگه می دارد.
مراجع:
- "سخنرانی 6.5 - rmsprop: گرادیان را بر میانگین جاری قدر اخیر آن تقسیم کنید" (تیلمن و هینتون، 2012)
- "تولید توالی با شبکه های عصبی مکرر" (گریوز، 2013)
اعلامیه
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).
الگوریتم نزولی گرادیان تصادفی را با پشتیبانی از تکانه، کاهش نرخ یادگیری و تکانه نستروف پیادهسازی میکند. مومنتوم و تکانه نستروف (معروف به روش گرادیان شتابدار نستروف) روش های بهینه سازی مرتبه اول هستند که می توانند سرعت تمرین و نرخ همگرایی نزول گرادیان را بهبود بخشند.
مراجع:
- "روش تقریب تصادفی" (رابینز و مونرو، 1951)
- "در مورد روش تقریب تصادفی رابینز و مونرو" (Wolfowitz، 1952)
- "تخمین تصادفی حداکثر تابع رگرسیون" (کیفر و ولفوویتز، 1952)
- «برخی از روشهای افزایش سرعت همگرایی روش تکرار» (پلیاک، 1964)
- "روشی برای مشکل کمینه سازی محدب نامحدود با نرخ همگرایی" (نستروف، 1983)
اعلامیه
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