مثلما أن Tensor
هو لبنة البناء الأساسية لدينا للحسابات المتوازية المتسارعة، سيتم التعبير عن معظم نماذج وعمليات التعلم الآلي من حيث بروتوكول Layer
. تحدد Layer
واجهة للأنواع التي تأخذ مدخلات قابلة للتمييز، وتعالجها، وتنتج مخرجات قابلة للتمييز. يمكن أن تحتوي Layer
على حالة، مثل الأوزان القابلة للتدريب.
Layer
عبارة عن تحسين لبروتوكول Module
النمطية، حيث تحدد Module
الحالة الأكثر عمومية حيث لا يكون إدخال النوع قابلاً للتمييز بالضرورة. ستتعامل معظم المكونات في النموذج مع مدخلات قابلة للتمييز، ولكن هناك حالات قد تحتاج فيها الأنواع إلى التوافق مع Module
بدلاً من ذلك.
إذا قمت بإنشاء عملية لا تحتوي على معلمات قابلة للتدريب بداخلها، فستحتاج إلى تعريفها من حيث ParameterlessLayer
بدلاً من Layer
.
غالبًا ما يتم تعريف النماذج نفسها على أنها Layer
، وتتكون بانتظام من Layer
أخرى. يمكن التعامل مع النموذج أو الوحدة الفرعية التي تم تعريفها على أنها Layer
تمامًا مثل أي Layer
أخرى، مما يسمح ببناء نماذج معقدة بشكل عشوائي من نماذج أو وحدات فرعية أخرى.
لتحديد Layer
مخصصة لنموذج أو عملية خاصة بك، ستتبع بشكل عام قالبًا مشابهًا لما يلي:
public struct MyModel: Layer {
// Define your layers or other properties here.
// A custom initializer may be desired to configure the model.
public init() {}
@differentiable
public func callAsFunction(_ input: Tensor<Float>) -> Tensor<Float> {
// Define the sequence of operations performed on model input to arrive at the output.
return ...
}
}
يمكن الإعلان عن المكونات القابلة للتدريب Layers
، مثل الأوزان والتحيزات، بالإضافة إلى Layer
أخرى، كخصائص. يعد المُهيئ المخصص مكانًا جيدًا لعرض المعلمات القابلة للتخصيص لنموذج، مثل الأعداد المتغيرة للطبقات أو حجم الإخراج لنموذج التصنيف. أخيرًا، جوهر Layer
هو callAsFunction()
، حيث ستحدد أنواع الإدخال والإخراج بالإضافة إلى التحويل الذي يأخذ أحدهما ويعيد الآخر.
طبقات مدمجة
تم تغليف العديد من عمليات التعلم الآلي الشائعة Layer
لتستخدمها عند تحديد النماذج أو الوحدات الفرعية. فيما يلي قائمة بالطبقات التي يوفرها Swift لـ TensorFlow، مجمعة حسب المجالات الوظيفية:
زيادة
التفاف
- التحويل 1 د
- Conv2D
- تحويل3D
- كثيف
- DepthwiseConv2D
- SeparableConv1D
- SeparableConv2D
- TransposeConv1D
- TransposeConv2D
- TransposeConv3D
- صفر الحشو1D
- ZeroPadding2D
- ZeroPadding3D
التضمين
شكلية
تطبيع
التجميع
- متوسطPool1D
- AvgPool2D
- AvgPool3D
- ماكس بول1D
- MaxPool2D
- MaxPool3D
- FractionalMaxPool2D
- GlobalAvgPool1D
- GlobalAvgPool2D
- GlobalAvgPool3D
- جلوبال ماكس بول1D
- GlobalMaxPool2D
- GlobalMaxPool3D
الشبكات العصبية المتكررة
إعادة تشكيل
الاختزال
محسنات
تعد أدوات التحسين مكونًا أساسيًا في تدريب نموذج التعلم الآلي، حيث تقوم بتحديث النموذج بناءً على التدرج المحسوب. ستقوم هذه التحديثات بشكل مثالي بضبط معلمات النموذج بطريقة لتدريب النموذج.
لاستخدام مُحسِّن، قم أولاً بتهيئته لنموذج مستهدف بمعلمات التدريب المناسبة:
let optimizer = RMSProp(for: model, learningRate: 0.0001, decay: 1e-6)
قم بتدريب نموذج من خلال الحصول على تدرج فيما يتعلق بالإدخال ووظيفة الخسارة، ثم قم بتحديث النموذج على طول هذا التدرج باستخدام المحسن الخاص بك:
optimizer.update(&model, along: gradients)
محسنات مدمجة
يتم توفير العديد من أدوات تحسين الأداء الشائعة بواسطة Swift لـ TensorFlow. وتشمل هذه ما يلي: