الفئات التالية متاحة عالميًا.
إشارة ملكية قابلة للتغيير وقابلة للمشاركة إلى الموتر.
تصريح
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: قسمة التدرج على متوسط تشغيل حجمه الحديث" (Tieleman and Hinton, 2012)
- "توليد تسلسلات باستخدام الشبكات العصبية المتكررة" (جريفز، 2013)
تصريح
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 هي طريقة نزول متدرجة عشوائية تعتمد على معلومات الترتيب الأول. فهو يكيف معدلات التعلم بناءً على نافذة متحركة من تحديثات التدرج، بدلاً من تجميع كل التدرجات السابقة. وهكذا، يستمر AdaDelta في التعلم حتى بعد إجراء العديد من التحديثات. يتكيف بشكل أسرع مع الديناميكيات المتغيرة لمساحة مشكلة التحسين.
المرجع: "ADADELTA: طريقة معدل التعلم التكيفي" (زيلر، 2012)
تصريح
public class AdaDelta<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
آدم محسن.
ينفذ خوارزمية التحسين آدم. آدم هي طريقة نزول متدرجة عشوائية تحسب معدلات التعلم التكيفي الفردية لمعلمات مختلفة من تقديرات لحظات التدرج من الدرجة الأولى والثانية.
المرجع: "آدم: طريقة للتحسين العشوائي" (Kingma and 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.
نوع مختلف من آدم يعتمد على قاعدة اللانهاية.
المرجع: القسم 7 من "آدم - طريقة للتحسين العشوائي"
تصريح
public class AdaMax<Model: Differentiable & KeyPathIterable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
محسن AMSGrad.
هذه الخوارزمية عبارة عن تعديل لخوارزمية آدم مع خصائص تقارب أفضل عندما تكون قريبة من الأمثل المحلي.
المرجع: "في التقاء آدم وما بعده"
تصريح
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).
يطبق خوارزمية النسب التدرج العشوائي مع دعم الزخم، وتناقص معدل التعلم، وزخم نيستيروف. يعد الزخم وزخم نيستيروف (المعروف أيضًا باسم طريقة التدرج المتسارع لنيستيروف) من أساليب التحسين من الدرجة الأولى التي يمكنها تحسين سرعة التدريب ومعدل التقارب في نزول التدرج.
مراجع:
- "طريقة التقريب العشوائي" (روبنز ومونرو، 1951)
- "حول طريقة التقريب العشوائي لروبنز ومونرو" (ولفويتز، 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