التعلم الآلي بلغة C++: نظرة عامة على المكتبات الرئيسية
على الرغم من أن لغة Python أصبحت المعيار الفعلي للبحث والنمذجة السريعة في مجال التعلم الآلي (ML)، إلا أن لغة C++ تظل لغة لا غنى عنها لأنظمة الإنتاج حيث تكون الأداء العالي، واستهلاك الذاكرة المنخفض، والعمل في الوقت الفعلي (real-time) أمورًا بالغة الأهمية. تسمح لغة C++ باستخراج أقصى استفادة من الأجهزة، وهو أمر مهم بشكل خاص عند نشر النماذج على الأجهزة المحمولة، أو الأنظمة المدمجة، أو الخوادم عالية التحميل.
في هذه المقالة، سنستعرض خمس مكتبات رائدة للتعلم الآلي بلغة C++، ونقاط قوتها، وحالات الاستخدام النموذجية، وسنقدم أمثلة عملية على الكود. ستتعرف على المكتبة التي يجب اختيارها للتصنيف، والانحدار، والتجميع، والعمل مع الشبكات العصبية، أو معالجة الإشارات.
1. TensorFlow C++ API — قوة التعلم العميق
TensorFlow هو أحد أشهر الأطر للتعلم العميق. تسمح واجهة برمجة التطبيقات (API) الخاصة به بلغة C++ بتحميل النماذج المدربة مسبقًا (على سبيل المثال، من Python) وتنفيذ الاستدلال (inference) بأقصى سرعة. هذا هو الخيار الأمثل للأنظمة المدمجة (Raspberry Pi، Jetson Nano، Android) وخوادم الإنتاج.
الإمكانيات الرئيسية:
- العمل مع الرسوم البيانية للحسابات المحفوظة (SavedModel، Frozen Graph).
- دعم وحدة معالجة الرسوميات (GPU) عبر CUDA و cuDNN.
- تحسين النموذج لجهاز معين (XLA، Quantization).
مثال على تحميل وتشغيل نموذج (الاستدلال):
#include <tensorflow/core/public/session.h>#include <tensorflow/core/platform/env.h>
using namespace tensorflow;
int main() { // إنشاء جلسة Session* session; NewSession(SessionOptions(), &session);
// تحميل الرسم البياني من ملف GraphDef graph_def; Status status = ReadBinaryProto(Env::Default(), "model.pb", &graph_def); if (!status.ok()) { /* معالجة الخطأ */ }
// إضافة الرسم البياني إلى الجلسة session->Create(graph_def);
// تجهيز بيانات الإدخال (موتر) Tensor input_tensor(DT_FLOAT, TensorShape({1, 224, 224, 3})); auto input_map = input_tensor.tensor<float, 4>(); // ... ملء الموتر بالبيانات ...
// تنفيذ الاستدلال std::vector<Tensor> outputs; session->Run({{"input_tensor", input_tensor}}, {"output_tensor"}, {}, &outputs);
// استخدام النتيجة auto result = outputs[0].tensor<float, 2>(); std::cout << "Prediction: " << result(0, 0) << std::endl;
session->Close(); return 0;}2. Dlib — أداة متعددة الاستخدامات للتعلم الآلي ورؤية الكمبيوتر
Dlib هي مكتبة للأغراض العامة تتضمن كلاً من خوارزميات التعلم الآلي الكلاسيكية (SVM، أشجار القرار، K-means) والشبكات العصبية العميقة الحديثة. وهي قوية بشكل خاص في مهام رؤية الكمبيوتر: كشف الوجوه، تتبع الكائنات، التعرف على الوجوه (FaceNet).
الميزات الرئيسية:
- تكامل بسيط: header-only لمعظم الوظائف.
- دعم مدمج لتعدد الخيوط (thread_pool).
- أدوات جاهزة لمعالجة الصور وعمليات المصفوفات.
مثال على تدريب مصنف SVM:
#include <dlib/svm.h>#include <dlib/rand.h>
using namespace dlib;
int main() { // نوع النواة: دالة الأساس الشعاعي (RBF) typedef radial_basis_kernel<sample_type> kernel_type;
// إنشاء المصنف والمدرب svm_c_trainer<kernel_type> trainer; trainer.set_kernel(kernel_type(0.1));
// بيانات التدريب std::vector<sample_type> samples; std::vector<double> labels; // ... ملء samples و labels ...
// التدريب decision_function<kernel_type> df = trainer.train(samples, labels);
// اختبار عينة جديدة