C++ für maschinelles Lernen: praktische Möglichkeiten und Grenzen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

C++ für maschinelles Lernen: Möglichkeiten und Grenzen in der Praxis

\n\n

Wenn es um maschinelles Lernen geht, denken die meisten Entwickler sofort an Python mit seinem Ökosystem aus PyTorch, TensorFlow und scikit-learn. C++ bleibt jedoch ein unverzichtbares Werkzeug für Produktionssysteme, bei denen Geschwindigkeit, geringe Latenz und Speicherkontrolle entscheidend sind. In diesem Artikel analysieren wir, wie man C++ in der Praxis für maschinelles Lernen einsetzt, welche Stärken es hat und wo es Python unterlegen ist.

\n\n

Warum ist C++ für ML immer noch relevant?

\n

Python dominiert in der Forschung und beim Prototyping, aber C++ ist die Sprache, in der die Kerne fast aller gängigen ML-Frameworks (TensorFlow, PyTorch, XGBoost) geschrieben sind. Wenn Sie:

\n
    \n
  • Ein Modell auf eingebetteten Geräten (IoT, Robotik) bereitstellen müssen;
  • \n
  • Daten in Echtzeit verarbeiten müssen (Autopiloten, Trading);
  • \n
  • Maximale Leistung ohne den Overhead eines Interpreters erreichen müssen;
  • \n
  • ML in bestehenden C++-Code integrieren müssen (Spiele, CAD, Simulatoren),
  • \n
\n

dann ist C++ nicht nur eine Alternative, sondern die einzige Wahl.

\n\n

Praktische Möglichkeiten von C++ für ML

\n\n

1. Arbeit mit linearer Algebra (Eigen)

\n

Die Grundlage jedes ML sind Matrixoperationen. In C++ wird dafür die Bibliothek Eigen verwendet. Sie bietet eine Leistung, die nahe an manuellen Optimierungen liegt, aber mit einer benutzerfreundlichen Syntax.

\n
#include <Eigen/Dense>\n#include <iostream>\n\nint main() {\n    // Matrizen erstellen\n    Eigen::MatrixXd X(3, 2);\n    X << 1, 2,\n          3, 4,\n          5, 6;\n    Eigen::VectorXd y(3);\n    y << 2, 4, 6;\n\n    // Lösung des kleinsten Quadrate Problems: w = (X^T X)^{-1} X^T y\n    Eigen::VectorXd w = (X.transpose() * X).ldlt().solve(X.transpose() * y);\n    std::cout << "Modellgewichte: " << w.transpose() << std::endl;\n    return 0;\n}
\n

Dieser Code berechnet eine lineare Regression ohne eine einzige Schleife – Eigen verwendet unter der Haube Vektorisierung und Multithreading.

\n\n

2. Klassisches ML mit Dlib

\n

Dlib ist eine der wenigen C++-Bibliotheken, die vorgefertigte Algorithmen bereitstellt: SVM, k-Nächste-Nachbarn, Entscheidungsbäume und sogar Deep Learning.

\n
#include <dlib/svm.h>\n#include <dlib/rand.h>\n#include <iostream>\n\nint main() {\n    using sample_type = dlib::matrix<double, 2, 1>;\n    std::vector<sample_type> samples;\n    std::vector<double> labels;\n\n    // Generierung synthetischer Daten\n    dlib::rand rnd;\n    for (int i = 0; i < 100; ++i) {\n        sample_type s;\n        s(0) = rnd.get_random_double();\n        s(1) = rnd.get_random_double();\n        samples.push_back(s);\n        labels.push_back(s(0) + s(1) > 1.0 ? 1.0 : -1.0);\n    }\n\n    // Training einer SVM mit RBF-Kernel\n    dlib::svm_c_ekm_trainer<dlib::kernel_type> trainer;\n    trainer.set_kernel(dlib::radial_basis_kernel<sample_type>(0.1));\n    auto decision_function = trainer.train(samples, labels);\n\n    // Test\n    sample_type test = {0.8, 0.7};\n    std::cout << "Vorhersage: " << decision_function(test) << std::endl;\n    return 0;\n}
\n

Dlib unterstützt die Serialisierung von Modellen, sodass trainierte Modelle gespeichert und in der Produktion geladen werden können.

\n\n

3. Inferenz neuronaler Netze ohne Python

\n

Verwenden Sie zum Ausführen bereits trainierter Modelle in C++ ONNX Runtime oder das TensorFlow C++ API. Beispiel für das Laden eines ONNX-Modells:

\n
#include <onnxruntime/core/session/onnxruntime_cxx_api.h>\n#include <vector>\n\nint main() {\n    Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "test");\n    Ort::SessionOptions session_options;\n    Ort::Session session(env, "model.onnx", session_options);\n\n    // Vorbereitung der Eingabedaten (Beispiel für ein Bild 3x224x224)\n    std::vector<float> input_tensor_values(3 * 224 * 224, 0.0f);\n    std::vector&l                

Blogs

Buchempfehlungen